Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firefox 如何使用相对Xpath访问第二个元素_Firefox_Xpath_Selenium Webdriver_Selenium Ide_Robotframework - Fatal编程技术网

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.但是关于这个问题,我认为它是一个工作.很好.这也是用硒来工作的.我以前和<代码>兄弟姐妹< /代码>一起工作过,但是我认为<代码>后代> /代码>更接近我的思维方式.很好.这也是用硒来工作的.我以前和<代码>兄弟姐妹< /代码>一起工作过,但是我认为<代码>后代>代码>更接近我的思维方式。