java - 通过 XPath 获取 HTML 元素的子元素

标签 java html xml selenium xpath

我有一个非常简单的问题,我在 html 页面中有一个 div,我可以通过他的 XPath 访问它://div[2]/div/div[2]/div[2]/div[2].

我想要一个可以提供该 div 的所有子项的 XPath,但我找不到它。 我需要使用 Selenium 的 findElements 方法获取元素,但我测试过的方法不起作用:

我的 HTML 代码如下所示:

<div>
    <input/>
    <span/>
    <p></p>
</div>

我想像这样使用 XPath :

//div[2]/div/div[2]/div[2]/div[2]/child

我的 Java Selenium 脚本是这样的:

List<WebElement> listElement = driver.findElements(By.xpath(xpath));

for(WebElement element : listElement) {
    System.out.println(element.getAttribute("id"));
}

我应该输入什么 XPath 来获取 div 的子元素?

编辑 1:我确实使用了 * 并且它正在工作,但是当我计算元素的数量时它会打印出我 6. * 是否将他 child 的 child 视为他自己的 child ??

最佳答案

如果您问题中 HTML 片段中的 div 位于

//div[2]/div/div[2]/div[2]/div[2]

那么 input 子元素会在这里:

//div[2]/div/div[2]/div[2]/div[2]/input

所有的子元素都在这里:

//div[2]/div/div[2]/div[2]/div[2]/*

更新:

EDIT 1: I did use the * and it's working, but when i count the number of element it prints me 6. Does the * consider the children of his children as his own children ??

不,div/* 仅选择父级 div 的直接子元素。

如果您对比预期更多的子项感到惊讶,可能是基本 XPath 选择了多个元素,然后您选择的子项不仅仅是目标 div 元素。


更新 2:

如果您无法发布 MCVE ,你仍然对返回的 child 数量感到困惑,

//div[2]/div/div[2]/div[2]/div[2]/*

尝试在您提供的作为基础的 XPath 上挑战自己:

//div[2]/div/div[2]/div[2]/div[2]/

先试试

//div[2]

它真的像您期望的那样选择了单个 div 吗?

然后试试

//div[2]/div

再一次,看看这个是否真的选择了您期望的单个 div

以这种方式继续,直到您到达所选元素的实际情况与您的预期不同的地方。您的答案将很明显,或者您有更具体的问题要问。

在没有看到您的 XML/HTML 的情况下,这已经是最好的建议了。

关于java - 通过 XPath 获取 HTML 元素的子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38226664/

相关文章:

javascript - 我的 jquery 代码没有动画

java - 如何使用 axis2 从 SOAP web 服务获取作为字符串的 xml 响应

java - 无法在 OpenCms 中按升序或降序对列表集合进行排序

java - CORBA 命名服务返回注册对象的错误位置

javascript - 如何禁用提交按钮,直到所有输入类都具有类 ="valid"

javascript - jQuery 将类添加到具有特定标签的选定单选按钮

xml - JAXB 生成具有属性组的模式

java - 如何在android studio中将图像放在按钮上

java - 如何在不截断文件的情况下检查文件锁?

java - 备份和恢复 HsqlDb 嵌入文件(非数据库)