我们可以在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标签紧密结合。我需要一个XPath,即使在使用其他标签装饰muth-elements时也能正常工作。
我知道出于测试目的,我可以更改后端逻辑以在html中提供额外的测试句柄,例如data- *属性,但是假设我无法更改测试中的应用程序代码。
所以,我正在搜索XPath查询,如:“给我第三个<li>
元素,无论它放在指定页面(或页面块)中,即使它是多次嵌套”
答案 0 :(得分:14)
请注意,[position()=3]
可缩短为[3]
。你问题的答案是
(//li)[3]
该位置与括号返回的节点列表有关。