Skip to main content
 首页 » 编程设计

selenium之从哪里开始 webdriver 使用 xpath 查找元素

2025年05月04日90birdshome

我目前正在使用 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章节:



引用:
  • XPath Tutorial
  • XPath Operators & Functions