Выбор раскрывающегося списка в WebDriverJs

У меня есть раскрывающийся список, который я бы хотел выбрать, используя WebDriverJS. Я посмотрел руководство пользователя ниже и не смог узнать, как это сделать.

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

Я даже попробовал несколько вещей, которые были задокументированы для версии Java следующим образом:

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

И он просто говорит, что "Выбрать" не существует.

Я прошел через источник и до сих пор не могу найти ничего, что могу использовать.

Ответ 1

Вам не нужно два щелчка, чтобы выбрать параметр, просто нажмите на опцию напрямую. Что-то вроде,

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

Ответ 2

Я поделился функцией, чтобы выбрать раскрывающийся элемент с текстом здесь.

Код:

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');

Ответ 3

Я использую webdriverjs и хочу выбрать опцию по индексу, так же как:

driver.click('#my_select_box').click('#my_select_box option:nth-child(3)')

Ответ 4

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

Ответ 5

Отправка ключей на выпадающий элемент была бы достаточной в этом случае, например;

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

Когда в отображаемом тексте есть пробел, веб-драйверу нужно сосредоточиться больше, поэтому простое добавление функций щелчка решит эту проблему;

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

Ответ 6

Это должно быть достигнуто

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

Ответ 7

Некоторые браузеры были очень сложными с выпадающими списками. Я получил некоторые идеи и собрал 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);

 }

Ответ 9

Это будет работать для меня (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 

Ответ 10

Я использовал 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();
     });
 });

Ответ 11

используйте xpath, подобный этому

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

Ответ 12

Найдите элемент select и нажмите на него, чтобы отобразить раскрывающийся список

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

Затем выберите один из вариантов и нажмите на него. Я думаю, что выбор по xpath действительно будет работать лучше здесь.

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

Ответ 13

Следующий код определяет доступные селектора в WebDriverJS:

webdriver.Locator.Strategy = {
  'className': webdriver.Locator.factory_('class name'),
  'class name': webdriver.Locator.factory_('class name'),
  'css': webdriver.Locator.factory_('css selector'),
  'id': webdriver.Locator.factory_('id'),
  'js': webdriver.Locator.factory_('js'),
  'linkText': webdriver.Locator.factory_('link text'),
  'link text': webdriver.Locator.factory_('link text'),
  'name': webdriver.Locator.factory_('name'),
  'partialLinkText': webdriver.Locator.factory_('partial link text'),
  'partial link text': webdriver.Locator.factory_('partial link text'),
  'tagName': webdriver.Locator.factory_('tag name'),
  'tag name': webdriver.Locator.factory_('tag name'),
  'xpath': webdriver.Locator.factory_('xpath')
};

goog.exportSymbol('By', webdriver.Locator.Strategy);

Источник: https://code.google.com/p/selenium/source/browse/javascript/webdriver/locators.js

Ответ 14

На самом деле это не щелчок по опции, но на самом деле он ее выбирает.

  • Найдите элемент select.
  • Нажмите выбрать элемент
  • Введите вариант текст в элемент select с помощью sendKeys()
  • Нажмите выбрать элемент