Phpunit 使用XPath获取第N个元素-当元素[N]失败时
已经有一些关于XPath中第n个元素的讨论: 我正在使用Selenium和PHPUnit进行功能测试。我的问题是,在具有大表单的页面上,第n个选择器不起作用。我有80个输入字段(使用Selenium的getXpathCount('//input')调用来获得确切的数字),我想遍历这80个字段并键入一些文本。 我已经尝试但不起作用的内容(N是索引变量): 以及上面所有的混合物。它通常触发一个异常,表示:在N=2处找不到元素。我尝试了几种用于浏览器的XPath工具,所以像Chrome中的XPathEvaluator这样的本机扩展几乎都给了我正确的结果。所以Seleniums XPath解析器的工作方式似乎有点不同 你觉得怎么样?我错过了一件大事吗 更新: 这是我的解决方案: getAllFields():然后我遍历 它实际上并不能解决原来的问题,所以我仍然对答案感兴趣Phpunit 使用XPath获取第N个元素-当元素[N]失败时,phpunit,selenium-rc,xpath,Phpunit,Selenium Rc,Xpath,已经有一些关于XPath中第n个元素的讨论: 我正在使用Selenium和PHPUnit进行功能测试。我的问题是,在具有大表单的页面上,第n个选择器不起作用。我有80个输入字段(使用Selenium的getXpathCount('//input')调用来获得确切的数字),我想遍历这80个字段并键入一些文本。 我已经尝试但不起作用的内容(N是索引变量): 以及上面所有的混合物。它通常触发一个异常,表示:在N=2处找不到元素。我尝试了几种用于浏览器的XPath工具,所以像Chrome中的XPa
谢谢 我不使用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)
(//input)[15]
返回文档中的第15个输入元素
//input[15]
返回作为其父元素的第15个输入子元素的每个输入元素
所以你的一些表达至少是不正确的。但它们并不都是错误的,所以我不知道为什么它对你不起作用 在没有看到您的特定代码和HTML的情况下,我们主要是在猜测。但是
xpath=(//input)[2]
将在页面上找到第二个输入字段,不管它在哪里。请确保包含xpath=
,因为Selenium RC不会假定它,除非定位器以/
开头。还要注意,在XPath中,n
从1开始,而不是像C派生语言那样从0开始。这一点对我很有用:
/genderant::input[@id=“search\u query”][2]
另请参见我得到的是://input[1]=所有输入//input[2]=空。在我的例子中,没有输入字段的公共父项。这是因为//input[1]表示“文档中的任何地方(
///code>),任何输入元素(input
)都是其父元素([1]
)的第一个子元素。”。与大多数受过C语言培训的程序员所期望的相反,[1]
并不意味着“集合的第一个输入元素”,而是position()=1
的缩写。它适用于(//输入)[1]
,因为(//输入)
是所有输入元素的集合,并且位置()
应用于该集合。而在///input[1]
中,position()
应用于元素。我能够利用这个解决方案:(../*[@id='myID']/tbody/tr[2]/td[4]/a)[1],其中[4]是列号,[1]是行号。@itarato,Michael在标准XPath中的意思是(在Selenium XPath中不一定如此)。当然,我也知道这一点。我只是在虚张声势。@LarsH:在Selenium中的意思是一样的。我很确定Selenium没有提供完整的、标准的XPath。但除了你刚才发布的内容,我现在无法找到证据。您的表达式(//input)[N]
应该可以工作。@LarsH:可能有XPath 1.0的某些部分Selenium RC API不正确支持,但我不知道有任何部分。我当然已经多次使用过这类东西的XPath版本,它们工作得很好。@Ross:很高兴知道。我会留意未来的例外情况,因为我没有任何细节可以提供。
//div/input[N] means second input in a div
(//div/input)[N] means second div that has an input (select the first input)