我训练的链接是:http://www.jigidi.com
// div [@class =' text'] / h4 / b - 找到第一个单元格的粗体数字
如何查找第二个单元格的粗体数字? 有没有办法在上面的代码中添加一些东西来告诉Selenium找不到第一个,而第二个div用class =' text'在DOM中。 例如:// div [1] [@ class =' text'] / h4 / b
或者使用class =' text'有一种更优雅的方式来查找第N个元素。 (因为我唯一能想到的是使用完整的xpath。)
答案 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" ]