【问题标题】:How to get all element within a division using selenium or jquery如何使用 selenium 或 jquery 获取分区中的所有元素
【发布时间】:2017-09-05 06:26:27
【问题描述】:

我需要获取一个部门内的所有元素。该部门根据从下拉列表中选择的值动态加载数据。因此,对于每个选定的值,该分区内都有一组不同的元素。 这是 HTML:

<div id="container1">
<div id="container1.1">
<input id="dropdown" type="select">//dropdown for dynamically selecting elements of container1.2
<options>1</options>
<options>2</options>
</div>
<div id="container1.2">
<input type="text" id="element1">
<button id="element2">
</div>
</div>//for container

硒代码:

List<WebElement> obj=driver.findElements(By.xpath("//[@id='Container']//*"));//to get all elements in division
        System.out.println(obj.get(0).getTagName());
        System.out.println(obj.get(1).getTagName());

这没有给出所需的结果。我收到以下错误:

invalid selector: Unable to locate an element with the xpath expression //[@id='Container']//* because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//[@id='Container']//*' is not a valid XPath expression.       

【问题讨论】:

  • 错误清楚地表明 xpath 不正确。您需要使用options。所以 xpath driver.findElements 应该找到下拉列表
  • 如果它是唯一的,则使用:List&lt;WebElement&gt; obj=driver.findElements(By.xpath("//input[@id='dropdown']"));
  • 你能告诉我在这种情况下如何给出正确的 xpath
  • @KishanPatel 我不知道所有元素每次都会加载什么。我需要类似的东西: driver.findElements(By.xpath("//*"));这给出了页面中的所有元素,对吗?同样,我只想要一个部门中的所有元素
  • 你不会知道下拉菜单中有什么吧?但是下拉菜单会一直存在。我对吗?

标签: jquery html selenium


【解决方案1】:

首先,如错误消息所述,您的 xpath 表达式无效。应该是

List<WebElement> obj=driver.findElements(By.xpath("//div[@id='Container']//*"));

如果元素不是特定于 div 的,您可以使用通配符 //*[@id='Container']。

在容器内列出子元素的其他方式,也许会更好

  1. List&lt;WebElement&gt; parentElements=driver.findElements(By.xpath("//div[@id='Container']"));
  2. 迭代元素,然后使用 parentElement.findElements(By.xpath(".//*")) 从 parentElement 中获取子元素。你可以参考这个文档https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#findElements-org.openqa.selenium.By-

希望这会有所帮助。

【讨论】:

  • 我使用了 driver.findElements(By.xpath("//*div[@id='Container']//*"));它起作用了......你能告诉我 //*div[@id='Container'] 和 //div[@id='Container'] 之间的区别 ....它们在功能上有何不同?
  • * 用于查找具有 id = Container; 的元素时。该元素是 div 还是任何其他 html 元素
  • 正如@kushal 所说,* 是通配符,所以如果你真的不知道哪个元素具有 id 容器,你可以使用 //*,但如果你知道它是 div,它使用 //div 更好,因为使用 * 将扫描您的所有 html 页面(与性能相关)。还有一件事,用法是 //*[@id=...] 而不是 //*div
【解决方案2】:

$('.className').html();

好多了

document.getElementsByClassName('className').innerHTML

【讨论】:

    【解决方案3】:

    这给出了一个 div 中的所有元素......第二次使用“//”而不是“/”......因为它只给出了根类型的元素。

    List<WebElement> obj=BaseClass.driver.findElements(By.xpath("//*[@id='Container']//*"));
    

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 2020-12-11
      • 2017-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多