2

我有以下 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"));

我什至可以像这样抓住所有li下面的ddChild东西:

List<WebElement> ddOpts = ddChild.findElements(By.xpath("//*[@id='gwt-uid-191-menu']/li[*]"));

但是我似乎无法弄清楚如何获取每个元素<a href="#nogo"...下标签的文本值的问题。li

我希望能够遍历所有ddOpts并获取<a href="#nogo"...文本值并将它们保存到ArrayList<String>.

因此,例如,我的第一个ArrayList<String>值将包含All Applications, then Option Alpha, then Option Beta,然后从下一个元素跳转到下一个ul元素dropdowns并再次执行整个过程,同时添加到ArrayList<String>.

我确信它是一个简单的解决方案,但我对 Selenium WebDriver 的经验有限。

谢谢!

PS:有没有一种简单的方法来获取 WebElement 的孩子?

4

6 回答 6

0

这也可以解决您的问题:

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;
    }
}
于 2013-05-29T06:51:39.797 回答
0
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();
}
于 2013-01-22T00:27:39.563 回答
0

要提取 的href属性WebElement(参考<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"));

}
于 2013-04-24T22:27:16.780 回答
0

下面的代码将在上面的 HTML 代码的下拉列表中选择 OptionAlpha

driver.findElement(By.xpath("//*[@class='ui-selectmenu-menu')).click();

driver.findElement(By.xpath("//*[@class='ui-widget ui-widget-content ui-selectmenu-menu-dropdown ui-corner-bottom']//**[text()='Option阿尔法']")).click();

于 2016-04-13T13:35:55.830 回答
0

请尝试以下代码以获取<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());
}

希望这可以帮助。

于 2016-06-14T05:59:37.303 回答
-1

href="#nogo"所有锚标签都相同,因此在通过该方法选择项目时可能会产生歧义

dropdowns.findelement(By.linktext("#nogo"));
于 2016-04-13T11:51:43.657 回答