量角器获取所有选择框(选项)值

rza*_*jac 8 integration-testing angularjs protractor

在我的测试中,我需要检查选择框中是否存在所有预期值.我花了一段时间,但我终于创建了这个辅助函数:

function getSelectValues(elementFinder)
{
  var defer = protractor.promise.defer(),
      promise = defer.promise;

  elementFinder.all(by.tagName('option')).then(function(elements)
  {
    var values = [],
        elemCount = elements.length,
        counter = 0;

    elements.forEach(function(element)
    {
      element.getAttribute('value').then(function(optionValue)
      {
        counter += 1;
        values.push(optionValue);

        if(counter === elemCount)
        {
          defer.fulfill(values);
        }
      });
    })
  });

  return promise;
}
Run Code Online (Sandbox Code Playgroud)

它有效,但看起来真的很难看.有没有更好的方法呢?

编辑:

经过另外两个小时的阅读文档后,我的帮助函数减少到:

getSelectValues: function(elementFinder)
{
  return elementFinder.all(by.tagName('option')).map(function(elem, index)
  {
      return elem.getAttribute('value');
  });
}

profileType = element(by.model('regObj.profileType'));
expect(getSelectValues(profileType)).toEqual(['', 'aa', 'bb', 'cc']);
Run Code Online (Sandbox Code Playgroud)

han*_*uan 12

如果您使用的是量角器> 1.3.0,则可以执行以下操作:

var values = element(by.model('regObj.profileType')).
                 all(by.tagName('option')).getAttribute('value');
expect(values).toEqual(['', 'aa', 'bb', 'cc']);
Run Code Online (Sandbox Code Playgroud)