我目前正在使用 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”开始搜索。不幸的是,我还没有找到以我理解的方式向我解释这一点的文档。我希望这里有人可以解释一下。
请您参考如下方法:
并不真地。
给定以下针对 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 表达式应用于 当前节点只要
查看 Selecting Nodes章节:
引用:


