2013-04-07 162 views
7

我有一个下拉框,我想使用WebDriverJS选择一个值。我已经看了下面的用户指南,找不到了怎么办呢在WebDriverJs中选择下拉菜单

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

我甚至尝试被证明为Java版本是这样几件事情:

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

它只是简单地说“Select”不存在。

我经历了源​​代码,仍然找不到任何可以使用的东西。

回答

2

这应该

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

当异步代码(承诺和所有),这将失败处理。 – 2016-01-28 21:20:14

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

在这里回答! – 2016-01-28 22:20:06

+0

这个解决方案的好处是,它是通过文本进行搜索,而不是通过选项号进行搜索。 – 2016-11-02 20:17:51

-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 2015-10-24 19:22:55

+0

这是行不通的! Java方法在这里是不够的 – 2016-01-28 19:25:15

8

你不不需要点击两次即可等一个选项,只需直接点击该选项即可。喜欢的东西,

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

这对我有用,选择下拉,然后发送密钥 – 2016-10-19 16:22:22

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

某些浏览器在下拉菜单时非常困难。我有一些想法,并使用JS注入拼凑了一个Java方法,可能适用于你遇到过这个问题的你。是的,这些问题正在逐步修复,但对于那些负责验证旧版浏览器的人员来说,这是非常有用的。 我希望这可以帮助,因为这可能是非常令人沮丧的!

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