私の目標は、ページ上のすべてのリンクの数を取得し、その数をループして、特定のページのすべてのリンクのテキストを取得することです。私はC#も使用しています(Visual Studio Expressで)。
ページに表示されているリンクのテキストを取得するための xpath は何ですか? 私はxpathにかなり慣れていて、何が欠けているのかわかりません。
カウント変数は次のとおりです。
decimal count = selenium.GetXpathCount("//a[@href]");
そのため、ページ上の @href 属性を持つリンクの数が返されます。ここまでは順調ですね。しかし、ループすると、ページに隠されているリンクのテキストが返されます。
for (int i = 1; i <= count; i++)
{
linkTxt = selenium.GetText("xpath=(//a[@href][" + i + "])/text()");
if (selenium.IsPresent("xpath=(//a[@href])[" + i + "]") && selenium.IsVisible("xpath=(//a[@href])[" + i + "]"))
{
MessageBox.Show(linkTxt, "Link Text", MessageBoxButton.OK);
}
}
それはうまくいくはずですが、問題の一部は、 //a リンクの親である //div の一部が非表示ではなく、 // テーブルの一部が非表示になっているためだと思います。
html の例:
<table border="0" cellpadding="0" cellspacing="0" id="tableIDTwo" class="navigation-inside product-rightonly" aria-hidden="false" style="">
<colgroup>
<col>
<col>
<col>
</colgroup>
<tbody>
<tr>
<td>
<div class="background-orange" id="someID" aria-hidden="false" style="white-space: nowrap;">1</div>
</td>
<td align="left" class="header-link" aria-hidden="false" style="vertical-align: middle; white-space: nowrap;">
<div class="gwt-HTML" id="VisibleLink" aria-hidden="false" style="white-space: nowrap;">
<a href="javascript:;">Visible Link Text</a>
<a></a>
</div>
</td>
</tr>
</tbody>
</table>
<div>
<table>
<tbody>
<tr>
<td>
<table>
<tbody>
<tr>
<td>
<div>
<div>
<table border="0" cellpadding="0" cellspacing="0" id="tableIDone" class="grid-sf-table-inside" aria-hidden="true" style="display: none;">
<colgroup>
<col>
<col>
</colgroup>
<tbody>
<tr aria-hidden="false" style="">
<td>
<div class="gwt-HTML" id="link1(1,0)" aria-hidden="false" style="white-space: normal;">
<a href="javascript:;">Hidden Link Text</a>
</div>
</td>
<td>
</tbody>
</table>
</div>
</div>
</td>
</tr>
</body>
</table>
</td>
</tr>
</tbody>
</table>
</div>