一尘不染

无法获得selenium中的第n个节点

selenium

我尝试编写xpath表达式,以使我的测试不会因小的设计更改而中断。因此,我编写了自己的表达式,而不是Selenium IDE生成的表达式。

这是一个问题:

//input[@name='question'][7]

此表达式根本不起作用。名为“问题”的输入节点分布在整个页面上。他们不是兄弟姐妹。

我尝试使用中间表达式,但是也失败了。

(//input[@name='question'])[2]
error = Error: Element (//input[@name='question'])[2] not found

这就是为什么我认为Seleniun具有错误的XPath实现。

根据XPath文档,位置谓词必须按 节点
集中的位置进行过滤,因此它必须找到input名称为的第七个'question'。在Selenium中,这不起作用。CSS选择器(:nth-of- kind)都没有。

我必须写一个过滤他们共同父母的表达式:

//*[contains(@class, 'question_section')][7]//input[@name='question']

这是Selenium特有的问题,还是我读错了规格?如何做一个简短的表达?


阅读 270

收藏
2020-06-26

共1个答案

一尘不染

这是一个问题:

//input[@name='question'][7]

此表达式根本不起作用。

这是一个常见问题解答

[]具有比更高的优先级//

上面的表达式选择input带有的每个元素@name = 'question',这是其父元素的第7个子input元素-
显然,未显示的文档中元素的父元素没有太多input子元素。

使用 (注意方括号):

(//input[@name='question'])[7]

这将选择input满足谓词条件的文档中的第7个元素。

编辑

认识硒的人(戴夫·亨特)建议上述表达式用硒写成:

xpath=(//input[@name='question'])[7]
2020-06-26