2014-09-30 56 views
8

在我的测试中,我需要检查所有预期值是否存在于选择框中。我花了一段时间,但我终于创造了这个辅助函数:量角器获取所有选择框(选项)值

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; 
} 

它的工作原理,但看起来十分可怕的我。有没有更好的方法来做到这一点?

编辑:

两个小时的阅读文档后,我得到了我的辅助函数简化为:

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']); 
+0

干得好!你可以添加它作为你自己问题的答案。 – 2014-09-30 22:20:16

+0

'如何提高我的代码'的问题不是真正的stackoverflow方式:s不会downvote,伟大的结果:) – nilsK 2014-10-01 20:01:32

+0

也许这个问题没有明确说明,但我认为必须有更好的方式来做到这一点。我没有在文档或东西中找到一些方法:)谢谢:) – Ralphz 2014-10-02 13:05:02

回答

11

如果您正在使用量角器> 1.3.0,你可以做到以下几点:

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