已经讨论过XPath中的第N个元素:
XPath query to get nth instance of an element
Get Nth child of a node using xpath
XPath and PHP: Parse from the nth instance of an element
我正在使用Selenium和PHPUnit进行功能测试。我的问题是在具有大表单的页面上,第N个选择器不起作用。我有80个输入字段(使用Selenium的getXpathCount('// input')调用来获取确切的数字) - 我想迭代80个字段并输入一些文本。 我已经尝试过但不工作(N是索引变量):
//input[N]
//input[position()=N]
input[N]
(//input)[N]
(.//input)[N]
css=input:nth-of-type(N)
以上所有的混合物。它通常会触发一个Exception说:在N = 2时找不到元素。我为浏览器尝试了几个XPath工具,因此像Chrome中的XPathEvaluator这样的原生扩展 - 几乎都给了我正确的结果。所以看起来Seleniums XPath解析器的工作方式有点不同。
你怎么看?我是否想念一件大事?更新: 在这里你是我的解决方案: getAllFields():http://release.seleniumhq.org/selenium-remote-control/0.9.0/doc/java/com/thoughtworks/selenium/DefaultSelenium.html#getAllFields()然后我遍历。
它实际上并没有解决原来的问题,所以我仍然对答案感兴趣。
谢谢!
答案 0 :(得分:10)
(//input)[15]
返回文档中的第15个输入元素
//input[15]
返回每个输入元素,它是其父元素的第15个输入子元素。
所以你的一些表达方式至少是不正确的。但它们并非都不正确,所以我不知道它为什么不适合你。
答案 1 :(得分:3)
如果没有看到您的特定代码和HTML,我们大多在此猜测。但是xpath=(//input)[2]
会在页面上找到第二个输入字段,无论它在哪里。请务必包含xpath=
,因为除非定位器以//
开头,否则Selenium RC不会采用它。另请注意,在XPath中,n
从1开始,而不是像C语言一样从0开始。
答案 2 :(得分:1)
答案 3 :(得分:-1)
我不使用PHPUnit,但我喜欢XPath。
在Safari检查员的搜索栏中:
//input[N]
或范围:
//div/input[N] means second input in a div
(//div/input)[N] means second div that has an input (select the first input)