选择WebDriverJs中的下拉列表

时间:2013-04-07 05:18:06

标签: javascript webdriver selenium-webdriver

我有一个下拉框,我想使用WebDriverJS选择一个值。我查看了下面的用户指南,但无法了解如何操作

  

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

我甚至尝试过为Java版本记录的一些内容:

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

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

我浏览了消息来源但仍无法找到任何我可以使用的内容。

14 个答案:

答案 0 :(得分:10)

您无需两次单击即可选择选项,只需直接单击该选项即可。像,

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

答案 1 :(得分: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');

答案 2 :(得分:3)

我正在使用webdriverjs并希望按索引选择选项,所以:

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

答案 3 :(得分: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

答案 4 :(得分:2)

在这种情况下,将键发送到下拉元素就足够了,例如;

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

当显示文本中有空格时,网络驱动程序需要重点关注,因此只需添加单击功能即可解决该问题;

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

答案 5 :(得分:1)

这应该通过

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

答案 6 :(得分:0)

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

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

答案 7 :(得分: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 

答案 8 :(得分: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();
     });
 });

答案 9 :(得分:0)

像这样使用xpath

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

答案 10 :(得分:0)

找到选择元素并单击以显示下拉列表

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

然后从选项中选择并单击。我认为按xpath进行选择在这里确实会更好。

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

答案 11 :(得分:0)

我遇到同样的问题,上述解决方案在我的TypeScript情况下不起作用

但是我仍然找到解决方案:

await driver.findElement(By.id("ELEMENT_ID")).sendKeys("SOME_VALUE");

由于驱动程序将在获得 selector元素

时返回承诺。

因此添加 await 来完成下一件事情

答案 12 :(得分:-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

答案 13 :(得分:-1)

实际上并没有点击该选项,但事实上它确实选择了它。

  1. 查找选择元素
  2. 点击选择元素
  3. 使用sendKeys()
  4. 选项文本输入到select元素中
  5. 点击选择元素