如何在selenium webdriver中获取Xpath Count

时间:2013-05-30 12:06:36

标签: xpath selenium selenium-webdriver

如何在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,任何人都可以帮助我吗?

3 个答案:

答案 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++;
    }
  }