web-dev-qa-db-ja.com

WebDriverJsでドロップダウンを選択する

WebDriverJSを使用して値を選択したいドロップダウンボックスがあります。以下のユーザーガイドを確認しましたが、その方法を見つけることができませんでした

https://code.google.com/p/Selenium/wiki/WebDriverJs

私はJavaバージョンのこのように文書化されたいくつかのことを試みます:

webdriver.Select(driver.findElement(webdriver.By.id("vote"))).selectByValue("5")

そして単に「選択」が存在しないと言っているだけです。

ソースを調べましたが、使用できるものが何も見つかりません。

14
vpn

オプションを選択するのに2回クリックする必要はなく、オプションを直接クリックするだけです。何かのようなもの、

driver.findElement(wd.By.css('#month>option[title=\'November\']')).click();
11
nilesh

テキストでドロップダウンアイテムを選択する関数を共有しました here

コード:

function selectOption(selector, item){
    var selectList, desiredOption;

    selectList = this.findElement(selector);
    selectList.click();

    selectList.findElements(protractor.By.tagName('option'))
        .then(function findMatchingOption(options){
            options.some(function(option){
                option.getText().then(function doesOptionMatch(text){
                    if (item === text){
                        desiredOption = option;
                        return true;
                    }
                });
            });
        })
        .then(function clickOption(){
            if (desiredOption){
                desiredOption.click();
            }
        });
}

で使用:

driver.selectOption = selectOption.bind(driver);
driver.selectOption(webdriver.By.id('my-dropdown'), 'My Value');
8
Dan

webdriverjs を使用していて、インデックスでオプションを選択したいので、次のようにしました:

driver.click('#my_select_box').click('#my_select_box option:nth-child(3)')
4
apfrod
driver.findElement({id: 'myDropDown'});// select dropdown element you wish to select
driver.sleep(1000);//not necessary
driver.findElement({id: 'myDropDown'}).sendKeys('name_of_option');//sending keys automatically fills dropdown with desired option
3
Beston Mawarire

この場合、ドロップダウン要素にキーを送信するだけで十分です。

driver.findElement(by.id('vote')).sendKeys('5');

表示テキストにスペースがある場合、クリック機能を追加するだけで解決できるように、webdriverはより集中する必要があります。

var ddlElement = driver.findElement(by.id('vote'));
ddlElement.click();
ddlElement.sendKeys('5');
ddlElement.click();
2
olcay

これは

selectElem = driver.findElement(webdriver.By.id("vote"))
selectElem.click()
selectElem.findElement(webdriver.By.css("option[value='5']")).click()
1

一部のブラウザでは、ドロップダウンが非常に困難でした。私はいくつかのアイデアを得て、JavaメソッドをJSインジェクションを使用してメソッドにまとめました。これは、これに遭遇した一部の人にとってはうまくいくかもしれません。はい、問題は時間とともに修正されますが、これはそれらにとって有用です古いブラウザの認定を任されている人たち。これは非常にイライラする可能性があるので、これが役に立てば幸いです!

public void getJSDropdown(String dropDown, String elementID)throws Exception{

     JavascriptExecutor executor = (JavascriptExecutor)driver;
     String dropdownScript = "var select = window.document.getElementById('" + 
             dropDown +
             "'); for(var i = 0; i < select.options.length; i++){if(select.options[i].text == '" +
             elementID +
             "'){ select.options[i].selected = true; } }";

     Thread.sleep(2000);
     executor.executeScript(dropdownScript);
     Thread.sleep(2000);

     String clickScript = "if ("+"\"createEvent\""+" in document) {var evt = document.createEvent("+"\"HTMLEvents\""+");     evt.initEvent("+"\"change\""+", false, true); " + dropDown + ".dispatchEvent(evt); } else " + dropDown + ".fireEvent("+"\"onchange\""+");";

     executor.executeScript(clickScript);

 }
1
Josheek

これは私のために働くでしょう(coffeescript)

selectList.findElements(By.tagName("option")) =
.then (options) ->
    len = options.length         #getting number of options in the select
    driver.wait =>               #verify all promises finished
        for option in options
            option.getText()
            .then (text) =>
                console.log(len)
                len -= 1
                console.log(text)
                if len is 0
                    true
    , 10000 
0
lucio bosque

ES6で以下を使用していました。

 let select = driver.findElement(By.css("select"));
 let options = select.findElements(By.css("option"));
 options.then(values => {
     return Promise.all(values.map(el => el.getText())).then(optTexts => {
         return values[optTexts.indexOf('Some option text')].click();
     });
 });
0
jonasnas

driver.click('//*[@id="vote"]/option[3]')

参照: https://stackoverflow.com/a/22159563/227578

0
dule

そのようなxp​​athを使用してください

await driver.findElement(By.xpath('//[@id="newEventOffices"]/option[3]')).click();
0
shujaat1989

選択要素を見つけてクリックし、ドロップダウンを表示します

driver.findElement(//div//select[@id="elementId"]).click();

次に、オプションから選択してクリックします。ここでは、xpathによる選択が本当にうまくいくと思います。

driver.findElement(By.xpath('//div//select[@id="elementId"]//option[optionIndex]')).click();

0
tutug