2012-04-30 34 views
2

我使用以下代码来访问的链接(PHPUnit的铁蛋白/硒):使用XPath检查在FireFox它返回7个元素(因为有的XPath元件数目返回的所有元素而不是比第一

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

7个链接匹配“测试题2”),但是当我在末尾添加[1]

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

仍然会返回7个环节。我在这里做错了什么?

+0

顺便说一下,selenium默认只会访问一个链接(第一个链接来自七个链接发生)。你想做什么? –

+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] 

这将从一整套...td[3]a儿童选择第一个a你可以改变你的查询元素。

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

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] 

将你的情况做一个更好的工作。

+0

请注意,spec说关于'// para [1]'而不是'/ para [1]'。 –

+1

所以'/ descendant :: td [normalize-space()='Test title 2'] [1]/following-sibling :: td [3]/a [。='delete']'会更准确。 –

+0

^他说什么^ –

相关问题