如何使用Selenium通过索引选择Xpath节点集中的指定节点?

Kym*_* Wu 82 selenium xpath

我正在写一个Selenium测试用例.这是我用来匹配数据表中所有"修改"按钮的xpath表达式.

//img[@title='Modify']
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何通过索引访问匹配的节点集?我试过了

//img[@title='Modify'][i]
Run Code Online (Sandbox Code Playgroud)

//img[@title='Modify' and position() = i]
Run Code Online (Sandbox Code Playgroud)

但是都不起作用..我也试过XPath checker(一个firefox扩展).发现总共有13个匹配,然后我完全不知道如何选择其中一个.. 或者XPath是否支持指定选择不在同一父节点下的节点?

Dim*_*hev 178

这是一个FAQ:

//someName[3]
Run Code Online (Sandbox Code Playgroud)

意味着:someName文档中的所有元素,即someName父元素的第三 个子元素 - 可能有许多这样的元素.

你想要的正是第3个someName元素:

(//someName)[3]
Run Code Online (Sandbox Code Playgroud)

说明:[]优先级高于(优先级)//.//someName当您需要指定所选节点列表的第N个节点时,请记住始终将类型的表达式放在括号中.

  • @Eytoss,不客气.是的,对于相对简单的答案,我得到的最多+ 1s - 不是因为我认为是我最大的成就的答案 - 可能是因为每个人都理解前者而几乎没有人理解后者:) (2认同)
  • @TEHEMPRAH,实际上我在答案中看到我没有说"其父母的第三个'someName'孩子".感谢您注意到这一点.现在更正了. (2认同)

Tom*_*lak 14

i在XPath中没有.

要么使用文字数字: //img[@title='Modify'][1]

或者动态构建表达式字符串:( '//img[@title='Modify']['+i+']'但请记住,动态XPath表达式 XSLT中不起作用).

或者XPath是否支持指定的不在同一父节点下的节点选择?

是: (//img[@title='Modify'])[13]


//img[@title='Modify'][i]意味着"任何<img>标题为'Modify'且名为的子元素<i>."