给定此页面片段
<section id="mysection">
<div>
<div>
<div>
<a href="">
<div>first</div>
</a>
</div>
<div>
<a href="">
<div>second</div>
</a>
</div>
</div>
</div>
</section>
我希望使用相对Xpath访问第二个a-元素。在FF (以及使用Selenium定位)中,
//section[@id='mysection']//a[1]
工作,但这不匹配
//section[@id='mysection']//a[2]
第二个表达式有什么问题?
编辑:实际上,我并不太关心Selenium (只需使用它进行快速验证)。我想让它与机器人框架中的selenium2library一起运行。在这里,输出是:
ValueError:不支持前缀为‘(//节[@id’)的元素定位器
对于建议的解决方案,(//section[@id='mysection']//a)[2]
发布于 2015-06-12 05:11:24
你可以用这个。这将选择节的锚后代,并为您获取第二个节点。这适用于xslt处理器,希望这适用于Selenium。
//section[@id='mysection']/descendant::a[2]
发布于 2015-06-11 02:12:59
试着这样做:
(//section[@id='mysection']//a)[2]
//a[2]
在同一个父元素中查找<a>
元素。因为每个父<div>
只包含一个<a>
子元素,所以您的xpath没有匹配任何内容。
发布于 2015-06-11 05:14:40
在这方面:
//section[@id='mysection']//a[1]
在任何上下文中(例如,在一个div中),您首先要匹配所有'a‘元素,但是使用以下方法
//section[@id='mysection']//a[2]
您正在尝试将任何第二个'a‘元素与任何上下文匹配,但是在任何节点中都没有超过一个'a’元素。因此,结冰的同级节点应该是那些'a‘标记的父div节点。
非常简单:
//section[@id='mysection']//a[1] - both elements
这就是为什么之前对整件事有偏执的回答是正确的。
//section[@id='mysection']//div[1]/a - only first element
//section[@id='mysection']//div[2]/a - only second elemnt
另一种分别处理a的方法:
//section[@id='mysection']//a[div[text()='first']]
//section[@id='mysection']//a[div[text()='second']]
https://stackoverflow.com/questions/30777566
复制相似问题