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>

このように WebElement を取得できui-selectmenu-menuます (ページにはたくさんあります。したがって、 を使用します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次の要素にジャンプし、プロセス全体をもう一度実行します。uldropdownsArrayList<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

以下のコードは、上記の 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()='オプションAlpha']")).click();

于 2016-04-13T13:35:55.830 に答える
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

以下のコードを試して、<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 に答える
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 に答える
-1

href="#nogo"すべてのアンカー タグで同じであるため、メソッドによってアイテムを選択する際にあいまいさが生じる可能性があります

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