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://www.cnblogs.com/mini-monkey/p/12104821...
web自动化测试过程中页面截图相对比较简单,可以直接使用sel...
目录前言一、Selenium简介二、浏览器驱动1.浏览器驱动参考2....
一、iframe的含义:iframe是HTML中框架的一种形式,在对界面...
转载请注明出处❤️作者:测试蔡坨坨原文链接:caituotuo.to...
'''##**认识selenium**​**下载:pipinstall...