微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 如何通过现有元素(而不是xpath)查找子元素(不是所有后代元素)

我试图找到已经找到的元素的孩子.我遇到的问题是我似乎只能得到现有元素的所有后代.

例如,给定以下HTML片段(您可能会将其识别为引导程序下拉菜单).

<div class="dropdown">
  <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu">
    <li>
      <a tabindex="-1" href="#">Action</a>
    </li>
    <li>
      <a tabindex="-1" href="#">Another action</a>
    </li>
    <li>
      <a tabindex="-1" href="#">Something else here</a>
    </li>
    <li class="divider"></li>
    <li class="dropdown-submenu">
      <a tabindex="-1" href="#">More options</a>
      <ul class="dropdown-menu">
        <li><a tabindex="-1" href="#">Second level link</a></li>
        <li><a tabindex="-1" href="#">Second level link</a></li>
        <li><a tabindex="-1" href="#">Second level link</a></li>
        <li><a tabindex="-1" href="#">Second level link</a></li>
        <li><a tabindex="-1" href="#">Second level link</a></li>
      </ul>
    </li>
  </ul>
</div>

我已经在下拉菜单中使用了现有的WebElement

WebElement dropdown = driver.findElementBy(By.cssSelector(".dropdown > .dropdown-menu");

而我正试图找到最外层菜单中所有孩子的手柄.最初我在做以下事情

List<WebElement> menuItems = dropdown.findElements(By.cssSelector(" > li > a");

假设它会导致构建最终选择器

.dropdown > .dropdown-menu > li > a

但是,这引发了一个例外

Caused by: org.openqa.selenium.remote.ErrorHandler$UnkNownServerException: An invalid or illegal string was specified

执行以下操作不会抛出异常,但会返回所有后代…而不仅仅是子项. menuItems的结果是10而不是5.

List<WebElement> menuItems = dropdown.findElements(By.cssSelector("li > a");

所以我想我的最终问题是有一种方法可以使用By.cssSelector来获取已经找到的节点的直接子节点吗?

XPATH不是一个允许的解决方案.

解决方法:

如何改变逻辑呢?

您有一个名为dropdown的WebElement,但它在DOM中定义为class dropdown-menu.为什么不将dropdown定义为div.dropdown而不是ul.dropdown-menu?那你的问题就可以解决了.

WebElement dropdown = driver.findElement(By.cssSelector(".dropdown");
List<WebElement> menuItems = dropdown.findElements(By.cssSelector(".dropdown-menu[role='menu'] > li > a");
List<WebElement> subMenuItems = dropdown.findElements(By.cssSelector(".dropdown-submenu li > a");

原文地址:https://codeday.me/bug/20190709/1408702.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐