6

我们可以在 xpath 中使用 :position() 来检索简单 HTML 块中的第 n 个元素,如下所示:

<ul>
<li>first</li>
<li>second</li>
<li>third</li>
</ul>

我们可以通过查询元素,//li[position()=2]但这在这种情况下不起作用:

<ul>
<b><li>first</li></b>
<b><li>second</li></b>
<b><li>third</li></b>
</ul>

我们必须使用//b[position()=2]/li.

问题是我想为我的 selenium 测试为 nth-element 创建一个 XPath 规则,它不会与 decoarational tags 紧密耦合。我需要一个 XPath,即使在 mu nth-elements 将被附加标签装饰时也能正常工作。

我知道出于测试目的,我可以更改后端逻辑以在 html 中提供额外的测试句柄,例如 data-* 属性,但假设我无法更改被测应用程序的代码。

因此,我正在搜索 XPath 查询,例如:“给我第三个<li>元素,无论它位于指定页面(或页面块)中的任何位置,即使它是多重嵌套的”

4

1 回答 1

14

注意[position()=3]可以简写为[3]。那么你的问题的答案是

(//li)[3]

该位置与括号返回的节点列表有关。

于 2013-06-07T10:29:57.047 回答