2013-04-07 2 views
7

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

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

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

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

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

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

ответ

2

Это должно достичь

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

При работе с асинхронным кодом (Promises и все) это не удастся. –

3

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

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

я делил функцию для выбора выпадающего элемента по его текст 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'); 
+0

Ответ прямо здесь! –

+0

Хорошо, что это решение, это то, что он ищет по тексту, а не по номеру опции. –

-1

Следующий код определяет доступные селекторы в 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

0

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

  1. Найти выбрать элемент
  2. Нажмите выберите элемент
  3. Тип вариант текст в некоторых элементов с помощью SendKeys()
  4. Нажмите выберите элемент
+0

Это не работает в разных браузерах, на leas я попробовал mac chrome, windows FF и не получилось): – porfiriopartida

+0

Это не сработает !. Java-подхода здесь не хватает –

8

Вы дон Мне нужно два клика на sel ect, просто нажмите на опцию напрямую.Нечто подобное,

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

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

Это сработало для меня, выбирая выпадающий список, а затем отправляя ключи –

0

Я использую следующие с 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

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

} 
0

использование XPath, как этот

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