2

我为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 有什么区别?

4

1 回答 1

3

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

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

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

但是您可以调用findElement(By)a WebElement,例如

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

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

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

会找到所有<ul>属于 first found 的孩子的 s <table>,就像它的意图一样。

于 2013-07-25T08:04:35.757 回答