如何在表中找到第N个元素?

时间:2015-03-30 15:40:55

标签: selenium xpath

我训练的链接是:http://www.jigidi.com
// div [@class =' text'] / h4 / b - 找到第一个单元格的粗体数字

如何查找第二个单元格的粗体数字? 有没有办法在上面的代码中添加一些东西来告诉Selenium找不到第一个,而第二个div用class =' text'在DOM中。 例如:// div [1] [@ class =' text'] / h4 / b

或者使用class =' text'有一种更优雅的方式来查找第N个元素。 (因为我唯一能想到的是使用完整的xpath。)

2 个答案:

答案 0 :(得分:2)

在不同的selenium语言绑定中,通常有方法可以找到单个元素和匹配定位符的多个元素。例如,在Python中有:

如果要查找xpath找到的第二个元素,请使用:

driver.find_elements_by_xpath('//div[@class='text']/h4/b')[1]

索引从0开始。

在Java中,有:

您将使用的代码:

driver.findElements(By.xpath("//div[@class='text']/h4/b")).get(1)

您还可以应用纯XPath解决方案:

//div[@class='text'][2]/h4/b

或:

(//div[@class='text']/h4/b)[2]

两者之间存在差异,但两者都适用于您的情况。索引从1开始。

答案 1 :(得分:0)

你想要找到什么并不是很清楚 - 如果你想找到别的东西,我很乐意编辑我的答案。用“单元格”来解释它并不是很有用,该页面上有div个元素,而不是td个。请通过显示您想要查找的内容来更清楚地说明这一点。

解决方案的难点在于正确地将括号()放在表达式中。具有正确语义的路径表达式用于查找这些事件的 first

(//div[@class="text"]/h4)[1]/b

用简单的英语表示

  

找到div属性值为“text”的所有class个元素,然后选择他们的子级h4。在此中间序列中,仅选择第一个结果,并选择其名为b的子元素。

,结果将是

<b>266</b>

你可以测试这个,例如在Web控制台中:

> $x('(//div[@class="text"]/h4)[1]/b/text()')

产量

> Array [ #text "266" ]

如果您想要找到第二个b元素,请使用(//div[@class="text"]/h4)[2]/b

> $x('(//div[@class="text"]/h4)[2]/b/text()')
> Array [ #text "96" ]