如何使用多级嵌套选择XPath中的第n个元素

如何使用多级嵌套选择XPath中的第n个元素,xpath,selector,css-selectors,Xpath,Selector,Css Selectors,我们可以在xpath中使用:position()检索简单HTML块中的第n个元素,如下所示: <ul> <li>first</li> <li>second</li> <li>third</li> </ul> 我们必须使用//b[position()=2]/li 问题在于,我想为selenium测试的第n个元素创建一个XPath规则,该规则不会与去关联标记紧密耦合。我需要一个XPath,即使在多个元素

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

<ul>
<li>first</li>
<li>second</li>
<li>third</li>
</ul>
我们必须使用
//b[position()=2]/li

问题在于,我想为selenium测试的第n个元素创建一个XPath规则,该规则不会与去关联标记紧密耦合。我需要一个XPath,即使在多个元素用附加标记修饰时也能工作

我知道,出于测试目的,我可以更改后端逻辑,以提供类似html的data-*属性的额外测试句柄,但假设我不能更改被测试应用程序的代码

因此,我正在搜索XPath查询,比如:“给我第三个
  • 元素,不管它位于指定的页面(或页面块)中的什么位置,即使它是多重嵌套的”

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

    (//li)[3]
    

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

    是否可以是
    [-1]
    ?@BudiMulyo:否,但您可以使用
    [last()]
    “name'last'未定义”@BudiMulyo:您使用的是什么XPath实现?对我有用<代码>(//li)[last()]我在使用python,示例代码:
    chrome.find_element_by_xpath(“//div[@id='tablGroupsO\u paginate']/ul/li[8]”
    <ul>
    <b><li>first</li></b>
    <b><li>second</li></b>
    <b><li>third</li></b>
    </ul>