WebDriverJSを使用して値を選択したいドロップダウンボックスがあります。以下のユーザーガイドを確認しましたが、その方法を見つけることができませんでした
私はJavaバージョンのこのように文書化されたいくつかのことを試みます:
webdriver.Select(driver.findElement(webdriver.By.id("vote"))).selectByValue("5")
そして単に「選択」が存在しないと言っているだけです。
ソースを調べましたが、使用できるものが何も見つかりません。
オプションを選択するのに2回クリックする必要はなく、オプションを直接クリックするだけです。何かのようなもの、
driver.findElement(wd.By.css('#month>option[title=\'November\']')).click();
テキストでドロップダウンアイテムを選択する関数を共有しました 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');
webdriverjs を使用していて、インデックスでオプションを選択したいので、次のようにしました:
driver.click('#my_select_box').click('#my_select_box option:nth-child(3)')
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
この場合、ドロップダウン要素にキーを送信するだけで十分です。
driver.findElement(by.id('vote')).sendKeys('5');
表示テキストにスペースがある場合、クリック機能を追加するだけで解決できるように、webdriverはより集中する必要があります。
var ddlElement = driver.findElement(by.id('vote'));
ddlElement.click();
ddlElement.sendKeys('5');
ddlElement.click();
これは
selectElem = driver.findElement(webdriver.By.id("vote"))
selectElem.click()
selectElem.findElement(webdriver.By.css("option[value='5']")).click()
一部のブラウザでは、ドロップダウンが非常に困難でした。私はいくつかのアイデアを得て、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);
}
これは私のために働くでしょう(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
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();
});
});
driver.click('//*[@id="vote"]/option[3]')
そのようなxpathを使用してください
await driver.findElement(By.xpath('//[@id="newEventOffices"]/option[3]')).click();
選択要素を見つけてクリックし、ドロップダウンを表示します
driver.findElement(//div//select[@id="elementId"]).click();
次に、オプションから選択してクリックします。ここでは、xpathによる選択が本当にうまくいくと思います。
driver.findElement(By.xpath('//div//select[@id="elementId"]//option[optionIndex]')).click();