Firefox 如何使用相对Xpath访问第二个元素
给定这个页面片段Firefox 如何使用相对Xpath访问第二个元素,firefox,xpath,selenium-webdriver,selenium-ide,robotframework,Firefox,Xpath,Selenium Webdriver,Selenium Ide,Robotframework,给定这个页面片段 <section id="mysection"> <div> <div> <div> <a href=""> <div>first</div> </a> </div> <div
<section id="mysection">
<div>
<div>
<div>
<a href="">
<div>first</div>
</a>
</div>
<div>
<a href="">
<div>second</div>
</a>
</div>
</div>
</div>
</section>
工作正常,但这不匹配
//section[@id='mysection']//a[2]
第二个表达式有什么问题
编辑:实际上我并不太关心Selenium IDE(只是使用它进行快速验证)。我想在机器人框架中使用Selenium2库。这里,输出是:
ValueError:前缀为“(//节[@id”的元素定位器不可用
支持
对于建议的解决方案(//section[@id='mysection']//a)[2]
请尝试以下方法:
(//section[@id='mysection']//a)[2]
//[2]
在同一父级中查找
元素。由于每个父级
只包含一个子级
,因此您的xpath与任何内容都不匹配。请尝试以下方法:
(//section[@id='mysection']//a)[2]
//一个[2]
在同一父级中查找
元素。由于每个父级
只包含一个子级
,您的xpath与此不匹配。:
//section[@id='mysection']//a[1]
您正在匹配任何上下文(例如,在一个div内)中的所有第一个“a”元素,但要使用
//section[@id='mysection']//a[2]
您正在尝试将任何第二个“a”元素与任何上下文匹配,但在任何节点中都没有多个“a”元素。
因此,iRecementing同级节点应该是那些“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']]
为此:
//section[@id='mysection']//a[1]
您正在匹配任何上下文(例如,在一个div内)中的所有第一个“a”元素,但要使用
//section[@id='mysection']//a[2]
您正在尝试将任何第二个“a”元素与任何上下文匹配,但在任何节点中都没有多个“a”元素。
因此,iRecementing同级节点应该是那些“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']]
您可以使用它。这将选择节的锚子代并获得第二个节点。这适用于xslt处理器,希望这适用于Selenium
//section[@id='mysection']/descendant::a[2]
您可以使用它。这将选择节的锚子代并获得第二个节点。这适用于xslt处理器,希望这适用于Selenium
//section[@id='mysection']/descendant::a[2]
到达第二个a元素的其他方法可以是使用
<div>second</div>, call this bottom-up approach
到达第二个a元素的其他方法可以是使用
<div>second</div>, call this bottom-up approach
对于Selenium IDE 2.9.0:
[error]未找到定位器:(//节[@id='mysection']///a)[2]
这也不起作用[error]未找到定位器:(//节[@id='mysection']///a)[1]
我这里没有Selenium,但是返回了预期的元素,因为您的HTML片段是输入XMLYes,您是对的。FF控制台在此返回1:$x((//section[@id='mysection']//a)[2]).length
。感谢您的解释。这似乎是一个特定于Selenium的问题。我编辑了我的问题并更新了您的答案。我不熟悉您正在使用的框架,不使用xpath中的索引如何//section[@id='mysection']//一个
,然后尝试使用Selenium IDE 2.9.0获取从主机编程语言返回的第二项:[error]定位器找不到:(//section[@id='mysection']//a)[2]
这也不起作用。[error]定位器找不到:(//section[@id='mysection']//a)[1]
我这里没有Selenium,但是返回了预期的元素,因为您的HTML片段是输入XMLYes,您是对的。FF控制台在此返回1:$x((//section[@id='mysection']//a)[2]).length
。感谢您的解释。这似乎是一个特定于Selenium的问题。我编辑了我的问题并更新了您的答案。我不熟悉您正在使用的框架,不使用xpath中的索引如何//section[@id='mysection']//a
,然后尝试从宿主编程语言返回第二项?谢谢。这正是我提出的解决方法。我问题中的页面摘录不是我正在使用的真实页面。对于真实页面,我对嵌套深度一无所知。我唯一能做的假设是有许多锚元素嵌套在某个div元素链中,因此循环通过//节[@id='mysection']//div[${index}]我认为这是一个可行的方法。谢谢。这正是我提出的解决方案。我的问题中的页摘录不是我正在使用的真实页面。对于实际页面,我不知道嵌套深度。我唯一能做的假设是有许多锚元素Neste。d在一些div元素链中,因此循环通过//节[@id='mysection']//div[${index}]A/Engult.Works.但是关于这个问题,我认为它是一个工作.很好.这也是用硒来工作的.我以前和<代码>兄弟姐妹< /代码>一起工作过,但是我认为<代码>后代> /代码>更接近我的思维方式.很好.这也是用硒来工作的.我以前和<代码>兄弟姐妹< /代码>一起工作过,但是我认为<代码>后代>代码>更接近我的思维方式。