为硒测试编写xpath以及它们之间的区别

时间:2013-07-25 07:50:50

标签: java facebook xpath selenium-webdriver

我已经为facebook的“注册”按钮编写了xpath,如下所示:

driver.findElement(By.xpath("//*[@id='u_0_7']")).click();
driver.findElement(By.xpath(".//*[@id='u_0_7']")).click();//there is a dot (.) before //

他们两个都运作良好。上面提到的两个xpath之间有什么区别?

1 个答案:

答案 0 :(得分:3)

//在整个文档中找到与*[@id='u_0_7']匹配的所有元素。

.//在当前上下文中查找与*[@id='u_0_7']匹配的所有元素。

在您的示例中,没有区别,因为driver.findElement(By)具有全局上下文。

但您可以在findElement(By)上致电WebElement,例如

driver.findElement(By.xpath("//table")).findElement(By.xpath("//ul"));

会在整个文档中找到所有<ul>,显然不是故意的。但是使用

driver.findElement(By.xpath("//table")).findElement(By.xpath(".//ul"));

会找到所有<ul>个第一个找到的<table>的子项,就像预期的那样。