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

时间:2014-04-06 14:20:36

标签: 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();
            }
        });
    }

这是一个我可以使用的选择项功能:

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

3 个答案:

答案 0 :(得分:23)

此问题类似于:How to select option in drop down protractorjs e2e tests

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

element(by.cssContainingText('option', 'BeaverBox Testing')).click();

如果您想按号码点击,可以执行以下操作:

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

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

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

答案 2 :(得分:5)

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

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