1

如何在 Selenium WebDriver 中获取 Xpath Count?

这是我的 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,有人可以帮助我吗?

4

3 回答 3

3

id()函数必须是表达式中的第一件事,它才能正常工作。

另外,我不确定规范中关于命名空间说明符的内容 - 当我在我的 Firefox 24(使用 Firebug + Firepath)中尝试它时,它不接受这些并且没有它们也能正常工作。

id('product')/tbody/tr[1]

也就是说,您的 XPath 仍然是错误的,并且与两个复选框都不匹配。它匹配第一个tr元素。为了匹配复选框,请尝试

id('product')/tbody//input[@type='checkbox']

或通过CSS 选择器查找(更短更快):

#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>带有复选框的 a”。

现在,您可以简单地遍历找到的元素并调用getText()它们。


如果您继续使用 WebDriver,您很快就会发现您肯定需要学习 CSS 选择器和/或 XPath 表达式(它们更强大)。

那里有很多教程,我相信您一定能找到一些。因此,我将向您指出我认为最有用的资源的规格:

于 2013-05-30T12:28:53.343 回答
2

检查大小列表 checkboxes = driver.findElements(By.cssSelector("#product > tbody input[type='checkbox']"));

int no_of_checkboxes = checkboxes.size();

于 2014-04-03T05:55:41.810 回答
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++;
    }
  }
于 2015-04-30T10:12:40.717 回答