选择硒中的第n个孩子

时间:2013-12-25 16:07:10

标签: html xml selenium xpath phpunit

起初我的问题是为什么在选择2个表中的第二个时我得到“Element // table [2] not found”错误。无效的Xpath(使用 assertElementPresent 函数):

//table[2]
(//table)[2] (here I got error for wrong xpath)
//table[position()=2]
//table[last()] (here I got the first table)

但最后我找到了答案

$this->assertElementPresent("xpath=(//table)[2]");

所以现在我的问题是为什么最后一个声明有效而其他声明没有?为什么

$this->assertElementPresent("//table[1]");

可以正常输出 xpath = ...

PHP 5.5.7,PHPUnit 3.8,Selenium 2.37.0,MacOS 10.9.1

1 个答案:

答案 0 :(得分:2)

每个表达的含义:

//table[2]

选择所有作为其各自父级的第二个表元素子元素的表元素。

(//table)[2]

从所有表格元素集合中选择第二项(这是您要做的)。

//table[position()=2]

与第一个相同。 [number][position() = number]

的简写
//table[last()]

选择所有表格元素,这些元素是其各自父级的最后一个表元素子元素。

关于你的第二个问题,来自Selenium documentation

  
    

如果没有明确的定位器前缀,Selenium将使用以下默认策略:
         •dom,用于以“document”开头的定位器          •xpath,用于以“//”开头的定位器          •标识符,否则

  

(//table)[2]不以//开头,这就是没有xpath=的情况下不接受表达式的原因。

相关问题