XPath元素编号返回所有元素而不是第一个元素

时间:2012-04-30 15:41:00

标签: xpath selenium

我使用以下代码访问链接(对于phpunit / selenium):

//td[normalize-space() ='Test title 2']/following-sibling::td[3]/a[.='delete']

在FireFox中使用XPath检查器它返回7个元素(因为有7个链接匹配“test title 2”),但是当我在末尾添加[1]时:

//td[normalize-space() ='Test title 2']/following-sibling::td[3]/a[.='delete'][1]

它仍然会返回7个链接。我在这里做错了什么?

2 个答案:

答案 0 :(得分:5)

当您在表达式的末尾添加[1]时,您选择每个a的第一个...td[3]子项(即7个a子节点)。您可以将查询更改为:

xpath=(//td[normalize-space() ='Test title 2']/following-sibling::td[3]/a[.='delete'])[1]

或者如果你使用webdriver(不需要xpath前缀):

(//td[normalize-space() ='Test title 2']/following-sibling::td[3]/a[.='delete'])[1]

这会从aa元素的...td[3]个孩子中选择第一个{{1}}。

有关更多教程,请参阅XPath Examples

答案 1 :(得分:0)

正如the spec所说:

  

位置路径//para[1]与位置的含义不同   路径/descendant::para[1]。后者选择第一个后代   para元素;前者选择所有后代para元素   他们父母的第一个para孩子。

因此,

//td[normalize-space() ='Test title 2']/following-sibling::td[3]/descendant::a[.='delete'][1]

会在你的情况下做得更好。