【发布时间】:2022-04-25 01:02:10
【问题描述】:
我有以下 HTML 代码:
<div class="ui-selectmenu-menu" style="z-index: 1; top: 251px; left: 37px;">
<ul class="ui-widget ui-widget-content ui-selectmenu-menu-dropdown ui-corner-bottom" aria-hidden="true" role="listbox" aria-labelledby="gwt-uid-191-button" id="gwt-uid-191-menu" style="width: 270px; height: auto;" aria-disabled="false" aria-activedescendant="ui-selectmenu-item-999">
<li role="presentation" class="ui-selectmenu-item-selected">
<a href="#nogo" tabindex="-1" role="option" aria-selected="true" id="ui-selectmenu-item-999">All Applications</a></li>
<li role="presentation" class="">
<a href="#nogo" tabindex="-1" role="option" aria-selected="false">Option Alpha</a></li>
<li role="presentation" class="ui-corner-bottom">
<a href="#nogo" tabindex="-1" role="option" aria-selected="false">Option Beta</a></li>
</ul>
</div>
...
<div class="ui-selectmenu-menu"...>...</div>
我可以像这样获取ui-selectmenu-menu 的WebElement(页面上有很多;因此,使用findElements):
List<WebElement> dropdowns = driver.findElements(By.className("ui-selectmenu-menu"));
下面的ul是这样的:
WebElement ddChild = dropdowns.get(0).findElement(By.className("ui-selectmenu-menu-dropdown"));
我什至可以像这样抓取ddChild 下的所有li:
List<WebElement> ddOpts = ddChild.findElements(By.xpath("//*[@id='gwt-uid-191-menu']/li[*]"));
但问题是我似乎无法弄清楚如何在每个 li 元素下获取 <a href="#nogo"... 标记的文本值。
我希望能够遍历所有 ddOpts 并获取 <a href="#nogo"... 文本值并将它们保存到 ArrayList<String>。
因此,例如,我的第一个ArrayList<String> 值将包含All Applications,然后是Option Alpha,然后是Option Beta,然后从下一个dropdowns 跳转到下一个ul 元素并执行整个再次处理,同时添加到ArrayList<String>。
我确信它是一个简单的解决方案,但我对 Selenium WebDriver 的经验有限。
谢谢!
PS:有没有一种简单的方法来获取 WebElement 的子元素?
【问题讨论】:
-
您是否尝试过使用 li 元素的 .getCssValue("href") 值?