23

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

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

我什至尝试了一些为 Java 版本记录的东西,如下所示:

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

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

我浏览了源代码,但仍然找不到任何可以使用的东西。

4

15 回答 15

14

您不需要单击两次来选择一个选项,只需直接单击该选项即可。就像是,

driver.findElement(wd.By.css('#month>option[title="November"]')).click();
于 2015-01-26T19:13:33.330 回答
9

我分享了一个功能来通过它的文字在这里选择一个下拉项目。

编码:

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');
于 2013-09-26T10:53:41.103 回答
5
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
于 2016-10-19T16:20:23.180 回答
3

我正在使用webdriverjs并想按索引选择选项,所以这样做了:

driver.click('#my_select_box').click('#my_select_box option:nth-child(3)')
于 2013-08-22T16:01:41.840 回答
2

这应该通过

selectElem = driver.findElement(webdriver.By.id("vote"))
selectElem.click()
selectElem.findElement(webdriver.By.css("option[value='5']")).click()
于 2013-04-07T07:40:36.917 回答
2

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

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

当显示文本中有空格时,webdriver需要更多的关注,添加点击功能就可以解决;

var ddlElement = driver.findElement(by.id('vote'));
ddlElement.click();
ddlElement.sendKeys('5');
ddlElement.click();
于 2019-04-04T14:01:28.277 回答
1

某些浏览器很难使用下拉菜单。我得到了一些想法并拼凑了一个使用 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);

 }
于 2017-02-23T19:58:57.023 回答
0

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

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

于 2015-06-09T14:49:30.337 回答
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();
     });
 });
于 2017-02-10T22:57:03.090 回答
0

我遇到了同样的问题,上面的解决方案在我的 typeScript 案例中不起作用

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

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

由于驱动程序在获取选择器元素时会返回一个承诺

所以添加等待来做接下来的事情

于 2020-07-25T10:04:46.523 回答
0

这对我有用(咖啡脚本)

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 
于 2016-02-25T09:50:49.203 回答
0

像这样使用xpath

await driver.findElement(By.xpath('//[@id="newEventOffices"]/option[3]')).click();
于 2018-02-21T19:07:55.227 回答
0

找到选择元素并单击它以显示下拉菜单

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

然后从选项中选择并单击它。我认为通过 xpath 选择在这里会更好。

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

于 2019-06-10T23:04:00.163 回答
-1

这实际上不是单击该选项,但它确实选择了它。

  1. 查找选择元素
  2. 单击选择元素
  3. 使用 sendKeys() 在选择元素中输入 选项文本
  4. 单击选择元素
于 2014-06-19T02:17:06.817 回答
-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

于 2014-01-20T18:21:53.790 回答