使用XPath获取第N个元素 - 当元素[N]失败时

ita*_*ato 4 xpath phpunit selenium-rc

关于XPath中的第N个元素已经有了一些讨论:

用于获取元素的第n个实例的XPath查询

使用xpath获取节点的第N个子节点

XPath和PHP:从元素的第n个实例解析

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

以及上述所有混合物.它通常会触发一个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 ()和然后我迭代.

它实际上并没有解决原来的问题,所以我仍然对答案感兴趣.

谢谢!

Mic*_*Kay 10

(//input)[15] 返回文档中的第15个输入元素

//input[15] 返回作为其父元素的第15个输入子元素的每个输入元素.

所以你的一些表达至少是不正确的.但它们并非都不正确,所以我不知道它为什么不适合你.


小智 -2

我不使用 PHPUnit,但我喜欢 XPath。

在 Safari 检查器的搜索字段中:

//input[N]
Run Code Online (Sandbox Code Playgroud)

或范围:

//div/input[N]    means second input in a div
(//div/input)[N]  means second div that has an input (select the first input)
Run Code Online (Sandbox Code Playgroud)