我试图找到一个已经找到的元素的孩子。我遇到的问题是我似乎只能获得现有元素的所有后代。
例如,给定以下 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");
我正在尝试处理最外层菜单的所有子 li。最初我正在执行以下操作
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 不是一个允许的解决方案。