首页 > 解决方案 > 从哪里开始 webdriver 使用 xpath 查找元素

问题描述

我目前正在使用 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 中搜索 firstName 元素的前导点,则会找到第一个框中的名字字段。但是,我认为我不需要这个,因为我从“box3”开始搜索。不幸的是,我还没有找到以我理解的方式向我解释这一点的文档。我希望这里有人可以解释一下。

标签: seleniumxpathwebdriver

解决方案


并不真地。

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

在此处输入图像描述

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 表达式仅应用于当前节点

查看选择节点章节:

在此处输入图像描述

参考:


推荐阅读