当前位置: 首页 > 面试题库 >

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

孟开宇
2023-03-14
问题内容

我尝试编写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特有的问题,还是我读错了规格?如何做一个简短的表达?


问题答案:

这是一个问题:

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

此表达式根本不起作用。

这是一个常见问题解答

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

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

使用 (注意方括号):

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

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

编辑

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

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


 类似资料:
  • 返回数组中的每个第 n 个元素。 使用 Array.filter() 创建一个包含给定数组的每个第 n 个元素的新数组。 const everyNth = (arr, nth) => arr.filter((e, i) => i % nth === nth - 1); everyNth([1, 2, 3, 4, 5, 6], 2); // [ 2, 4, 6 ]

  • 我必须找到每个数组元素的第N个nextInt。下面的代码真的很慢,因为数组元素超过40K,每个数组元素超过100万。 有没有更快的方法得到第100万个Nextint?如果是,请怎么做?

  • 我想做一个模板,在那里我可以输入一个索引,它会给我在那个索引的类型。我知道我可以用来实现,但我想自己实现它。例如,我想这样做, ...它会给出位置的类型(因为数组是从0开始索引的)。我怎么能这么做?多谢了。

  • 所以我从一次考试中得到了这个问题。 在单链表中,如何从尾部获得第n个节点? 这样对吗?有没有更好的解决办法?

  • 问题内容: 我正在尝试使用By.cssSelector来捕获类c3的第n个dom元素,其结构如下: 测试我的CSS选择器时,我变得越来越困惑。此选择器正确选择c2 / c3的第二个实例: 而: 什么都不选。 更糟糕的是,将其翻译成selenium,我似乎始终没有为所有3个版本找到任何东西。有很多选择这些元素的替代方法(我可能只做XPATH),但是我对nth-of- type的缺乏了解使我发疯。谁能