java 使用WebDriver获取子元素

ercv8c1e  于 2022-12-25  发布在  Java
关注(0)|答案(6)|浏览(227)

下面的代码是:

<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的子元素?*
7z5jn7bk

7z5jn7bk1#

List<WebElement> ddOpts = ddChild.findElements(By.xpath("//*[@id='gwt-uid-191-menu']/li/a"));
ArrayList<String> links = new ArrayList<String>();
for(WebElement we : ddOpts) {
    links.add(we.getText();
}
xurqigkl

xurqigkl2#

要提取WebElementhref属性(在此示例中指的是锚标记<a>),请执行以下操作:

List<WebElement> ddOpts = ddChild.findElements(By.xpath("//*[@id='gwt-uid-191-menu']/li/a"));
ArrayList<String> links = new ArrayList<String>();
for(WebElement we : ddOpts) {

    // ADD all the href attribute strings to the list
    links.add(we.getAttribute("href"));

}
jxct1oxe

jxct1oxe3#

这也可以解决您的问题:

List<WebElement> dropdowns = driver.findElements(By.className("x-combo-list"));        
WebElement ddChild = dropdowns.get(0).findElement(By.className("x-combo-list-inner"));   
List<WebElement> ddOpts = ddChild.findElements(By.xpath("//*[@id=\"x-auto-98\"]/div[4]"));

for(WebElement we:ddOpts){
    System.out.println(we.getText());
    if(we.getText().contains("ROLE_MANAGER")){

        we.sendKeys("ROLE_MANAGER");
        we.click();
        break;
    }
}
shyt4zoc

shyt4zoc4#

下面的代码将在上面HTML代码的下拉列表中选择OptionAlpha
驱动程序.findElement(通过.xpath(“//[@class ='ui-选择菜单-菜单')).单击();
驱动程序.findElement(通过.xpath(“//
[@class ='ui-小工具ui-小工具-内容ui-选择菜单-菜单-下拉ui-角-底部']//**[text()='选项字母']”)).单击();

ugmeyewa

ugmeyewa5#

请尝试以下代码获取<a href中的所有链接

List<WebElement> allLis = driver.findElements(By.xpath("//*[@id='gwt-uid-191-menu']/li/a");
// Looping through above list using for-each loop
for(WebElement eachLi : allLis) {
    System.out.println(eachLi.getText());
}

希望这个有用。

e3bfsja2

e3bfsja26#

href="#nogo"对于所有锚标记都是相同的,因此在通过方法选择项时可能会产生歧义

dropdowns.findelement(By.linktext("#nogo"));

相关问题