起初我的问题是为什么在选择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
答案 0 :(得分:2)
每个表达的含义:
//table[2]
选择所有作为其各自父级的第二个表元素子元素的表元素。
(//table)[2]
从所有表格元素集合中选择第二项(这是您要做的)。
//table[position()=2]
与第一个相同。 [number]
是[position() = number]
//table[last()]
选择所有表格元素,这些元素是其各自父级的最后一个表元素子元素。
关于你的第二个问题,来自Selenium documentation:
如果没有明确的定位器前缀,Selenium将使用以下默认策略:
•dom,用于以“document”开头的定位器 •xpath,用于以“//”开头的定位器 •标识符,否则
(//table)[2]
不以//
开头,这就是没有xpath=
的情况下不接受表达式的原因。