AngularJS + Protractor如何根据文本而非值来选择下拉选项

Lia*_*nat 6 angularjs protractor

我想通过它的文本点击项目,而不是从下拉框中点击它的值.

我找到了这个伟大的帖子:https://coderwall.com/p/tjx5zg但它没有按预期工作,搜索在找到匹配后永远继续搜索并且它没有点击该项目,

如果有人有更好的例子(一个工作的)或可以修复此代码并使其工作,

我会乖乖的.

这是使用后的代码Dan Haller(保留所有权利)

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();
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

这是一个选择项功能,我可以像这样使用:

var browser = protractor.getInstance();
browser.selectOption = selectOption.bind(browser);
browser.selectOption(protractor.By.id('my-dropdown'), 'My Value');
Run Code Online (Sandbox Code Playgroud)

Pau*_*ulL 23

这个问题类似于:如何在下拉量角器e2e测试中选择选项

只要您使用最新版本的量角器,您就可以:

element(by.cssContainingText('option', 'BeaverBox Testing')).click();
Run Code Online (Sandbox Code Playgroud)

如果您想按号码点击,您可以:

var selectDropdownbyNum = function ( element, optionNum ) {
  if (optionNum){
    var options = element.findElements(by.tagName('option'))   
      .then(function(options){
        options[optionNum].click();
      });
  }
};
Run Code Online (Sandbox Code Playgroud)

  • 我试过这种方式.但它说找不到元素.不可见 (3认同)

小智 12

此功能选择您选择框的第3个选项.

function selectDropdownByNumber(element, index, milliseconds) {
    element.findElements(by.tagName('option'))
      .then(function(options) {
        options[index].click();
      });
    if (typeof milliseconds !== 'undefined') {
      browser.sleep(milliseconds);
   }
}
var mySelect = $('#my-dropdown');
selectDropdownByNumber(mySelect, 2);
Run Code Online (Sandbox Code Playgroud)

更多信息可以在这里找到 - http://qainsight.blogspot.fr/2014/04/select-dropdown-value-in-protractor-js.html

  • 这可能与Protractor的版本有关,但对我来说,方法"findElements"不起作用.有一种称为"所有"的方法可以完成这项工作. (2认同)

suv*_*roc 5

如果要按值选择选项,可以使用:

var select = element.one(by.model('selectData'));
select.$('[label="Option 1"]').click();
Run Code Online (Sandbox Code Playgroud)