我使用以下代码访问链接(对于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个链接。我在这里做错了什么?
答案 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]
这会从a
个a
元素的...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]
会在你的情况下做得更好。