如何在Selenium WebDriver中获取Xpath计数?
这是我的HTML页面
<tbody xmlns="http://www.w3.org/1999/xhtml">
<tr class="odd">
<td>1</td>
<td>Cash</td>
<td>
<input type="checkbox" id="p1" checked="checked" value="1" name="productAccess"/>
<input type="hidden" value="1" name="__checkbox_productAccess"/>
</td>
</tr>
<tr class="even">
<td>2</td>
<td>Saving</td>
<td>
<input type="checkbox" id="p2" checked="checked" value="2" name="productAccess"/>
<input type="hidden" value="2" name="__checkbox_productAccess"/>
</td>
</tr>
我用过
int product_count = driver.findElements(By.xpath("//id('product')/x:tbody/x:tr[1]")).size();
但是我总是错误的xpath,任何人都可以帮助我吗?
答案 0 :(得分:3)
id()
函数必须是表达式中第一个能够正常工作的函数。
另外,我不完全确定规范中关于名称空间说明符的说法 - 当我在我的Firefox 24(使用Firebug + Firepath)中尝试它时,它不接受这些并且没有它们也能正常工作。
id('product')/tbody/tr[1]
那就是说,你的XPath仍然是错误的,并且与两个复选框都不匹配。它匹配第一个tr
元素。要匹配复选框,请尝试
id('product')/tbody//input[@type='checkbox']
或按CSS selector查找(更短更快):
#product > tbody input[type='checkbox']
所有这一切,如果您只是想循环复选框,您不必首先计算它们:(Java示例)
List<WebElement> checkboxes = driver.findElements(By.cssSelector("#product > tbody input[type='checkbox']"));
for (WebElement checkbox : checkboxes) {
// do your stuff with them
}
编辑以解决OP的评论
“......我希望表中的文字......”
没问题。
id('product')//td[following::td[1]/input[@type='checkbox']]
这是一个XPath表达式,它只匹配<td>
元素和您想要获取的文本。从字面上看,它匹配“<td>
后代的所有#product
个节点,后面紧跟着一个带有复选框的<td>
”。
现在,您可以简单地遍历找到的元素并在其上调用getText()
。
如果你将继续使用WebDriver,你很快就会发现你肯定需要学习CSS选择器和/或XPath表达式(它们更强大)。
那里有很多教程,我相信你能找到一些。所以我只想指出那些我认为最有用的资源:
答案 1 :(得分:2)
检查尺寸 列表复选框= driver.findElements(By.cssSelector(&#34; #product&gt; tbody input [type =&#39; checkbox&#39;]&#34;));
int no_of_checkboxes = checkboxes.size();
答案 2 :(得分:2)
Take the TR Count
int icount = driver.FindElement(By.XPath("\tbody\tr")).Count;
int icheckbox_counter = 0;
for(int i ; i<icount ;i++)
{
string strType = driver.FindElement(By.XPath("\tbody\tr["+icount+"]\td[3]")).GetAttribut("type")
if(strType.Trim() == "checkbox")
{
icheckbox_counter++;
}
}