我的目标是计算页面上所有链接的数量,然后遍历该计数并获取任何给定页面上所有链接的文本。我也在使用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);
}
}
这应该可行,但我认为问题的一部分是因为//链接的父亲的一些// 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>