我有一个非常简单的问题,我在 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/