当前位置: 首页 > 知识库问答 >
问题:

通过XPath获取超文本标记语言元素的子元素

锺离飞鸣
2023-03-14

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

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

我的超文本标记语言代码如下:

<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。是不是把他的孩子看作自己的孩子?

共有2个答案

幸越泽
2023-03-14
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对象

莘康裕
2023-03-14

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

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

然后,输入子元素将出现在这里:

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

所有的儿童元素都在这里:

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

更新:

编辑1:我确实使用了*并且它工作正常,但当我计算元素的数量时,它会将我打印为6。是不是把他的孩子看作自己的孩子?

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

如果您对子元素的数量超出预期感到惊讶,那么可能是基本XPath选择了多个元素,然后您选择的子元素不仅仅是目标div元素。

更新2:

如果你不能发布MCVE,并且你仍然对返回的儿童数量感到困惑,

//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的情况下,这几乎是建议所能提供的最好结果。

 类似资料:
  • 嗨,我一直在到处寻找一个非常简单的解释,如何通过xPath找到一个元素。 我想要的只是一种简单的方法来寻找一个元素,但是我想要找到的所有帮助都需要一个。这对我不管用。以下是我想做的: 加载URL 这是我的代码: 当我执行 我得到未定义时,我做 有没有更简单的方法来获取元素?也许是。。。。

  • 这就是HTML代码。到目前为止,我已经进行了以下xpath查询: 这让我找到了

  • 问题内容: 我的网页中有9行6列的表格。我想搜索文本“ MakeGoodDisabled- Programwise_09_44_38_461(n)”并获取单元格的xpath。我使用了以下内容,但由于无法在页面上找到文本而失败。你能帮忙吗?我正在使用Selenium Webdriver Junit对此进行编码。 问题答案: 我的意图是在表中查找文本并在同一行中获取相应的下一列值。我以为我将用所需的列

  • 我试图使用python/lxml和命令提取图像URl,但在隔离url本身时遇到麻烦。 下面是我想要的围绕img的HTML: 具体来说,我想隔离<代码>https://photos.zillowstatic.com/p_h/IS2fordnekys6d1000000000.jpgurl。 我尝试了几种方法,但都没有成功,包括以下几种方法:

  • 我试着通过电子邮件发送这个。我尝试了很多方法,但总是得到同样的结果:一个错误。 http://goto-21.net/campaign/htmlversion?mkt_hm=0 我试过这个: curl-s--user'api: key-3ax6xnjp29jd6fds4gc373sgvjxteol0'\Xhttps://api.mailgun.net/v2/samples.mailgun.org/

  • 我在将一些客户端数据表逻辑迁移到服务器端时遇到了一些困难。 我当前的问题是,对于Datatables,如果要对一大组数据(20000行)进行分页,我首先需要加载控制器中的所有行,然后将它们传递给视图: 然后,在加载所有内容和Datatables将记录分页为500页之前,需要等待大约2分钟: 我更改了Datatables声明,以通过处理服务器端处理,如下所示: 让它按我所希望的方式工作非常顺利,但问