从哪里开始Webdriver使用XPath查找元素

时间:2019-05-11 11:17:55

标签: selenium xpath webdriver

我目前正在使用Selenium / Webdriver测试一个网站,该网站在几个框中显示人员的姓名和地址。例如,每个框都包含一个“名字”字段。所有这些字段都生成了ID,因此我无法使用它们。

我的方法是先找到框,然后找到我要查找的元素。我使用这样的xPath表达式,有点复杂,但是对于这个问题,这种方式更容易

WebElement box3 = driver.findElement(By.xpath("//div[contains(@boxnum,'3')]");
WebElement firstName = box3.findElement(By.xpath(".//div[contains(@field,'firstname')]/input");

我也知道有绝对和相对的xPath表达式,但是显然我还没有真正理解它。如果我省略了在xPath中搜索fistName元素的起点,则会找到第一个框中的名字字段。但是,我以为不需要,因为我是从“ box3”开始搜索的。不幸的是,我还没有找到能以我理解的方式向我解释的文档。我希望这里有人可以解释这一点。

1 个答案:

答案 0 :(得分:2)

不是。

给出以下针对https://www.seleniumeasy.com/test/bootstrap-dual-list-box-demo.html页面评估的代码,如下所示:

enter image description here

driver.get("https://www.seleniumeasy.com/test/bootstrap-dual-list-box-demo.html");
WebElement listGroup = driver.findElement(By.xpath("//ul[@class='list-group']"));
List<WebElement> entries = listGroup.findElements(By.xpath("//li[@class='list-group-item']"));
entries.forEach(entry -> System.out.println(entry.getText()));

您将获得下一个输出:

bootstrap-duallist
Dapibus ac facilisis in
Morbi leo risus
Porta ac consectetur ac
Vestibulum at eros
Cras justo odio
Dapibus ac facilisis in
Morbi leo risus
Porta ac consectetur ac
Vestibulum at eros

Selenium从文档根目录评估XPath

如果您将代码修改为:

driver.get("https://www.seleniumeasy.com/test/bootstrap-dual-list-box-demo.html");
WebElement listGroup = driver.findElement(By.xpath("//ul[@class='list-group']"));
List<WebElement> entries = listGroup.findElements(By.xpath(".//li[@class='list-group-item']"));
entries.forEach(entry -> System.out.println(entry.getText()));

您将仅从第一列获取值。

bootstrap-duallist
Dapibus ac facilisis in
Morbi leo risus
Porta ac consectetur ac
Vestibulum at eros

在第二种情况下,XPath表达式仅应用于当前节点

查看Selecting Nodes章:

enter image description here

参考文献: