我有一个非常简单的问题,我在一个html页面中有一个div,我可以通过他的XPath访问它:ROW_NUMBER
。
我想要一个XPath,它会给这个div的所有孩子,但我找不到它。 我需要使用Selenium的findElements方法获取元素,但我测试的内容不起作用:
我的HTML代码如下所示:
//div[2]/div/div[2]/div[2]/div[2]
我希望像这样使用XPath:
<div>
<input/>
<span/>
<p></p>
</div>
我的Java Selenium脚本是这样的:
//div[2]/div/div[2]/div[2]/div[2]/child
我应该使用什么XPath来获取List<WebElement> listElement = driver.findElements(By.xpath(xpath));
for(WebElement element : listElement) {
System.out.println(element.getAttribute("id"));
}
的孩子?
编辑1:我确实使用*并且它正在工作,但是当我计算它打印我的元素数量时6.是否*认为他孩子的孩子是他自己的孩子?
答案 0 :(得分:1)
如果问题中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]/*
<强>更新强>
编辑1:我确实使用了*和它的工作,但是当我计算数字时 它打印我的元素6.是否*考虑他的孩子 孩子作为自己的孩子??
不,div/*
仅选择父div
的直接子元素。
如果您对比预期更多的孩子感到惊讶,那么基础XPath可能会选择多个元素,然后您选择的子项不仅仅是目标{{ 1}}元素。
更新2:
如果您无法发布MCVE,并且您仍然对返回的孩子数量感到疑惑,
div
尝试以您提供的XPath为基础挑战自己:
//div[2]/div/div[2]/div[2]/div[2]/*
首先,试试
//div[2]/div/div[2]/div[2]/div[2]/
它是否真的像您期望的那样选择单个//div[2]
?
然后尝试
div
再次,看看这个是否真的选择了你期望的单//div[2]/div
。
以这种方式继续,直到你到达所选元素的现实偏离你的期望的地方。你的回答很明显,或者你有一个更具体的问题要问。
如果没有看到您的XML / HTML,这与建议可以获得的一样好。
答案 1 :(得分:1)
List<WebElement> childs = driver.findElements(By.xpath("//div[2]/div/div[2]/div[2]/div[2]/*"));
在这种情况下,selenium会搜索路径div[2]/div/div[2]/div[2]/div[2]/
中的所有子元素,并将它们作为WebElement
对象设置在列表集合中。