我为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 有什么区别?
我为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 有什么区别?
//
*[@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>
,就像它的意图一样。