2014-09-30 6 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

अच्छी तरह से किया गया! आप इसे अपने स्वयं के प्रश्न के उत्तर के रूप में जोड़ सकते हैं। –

+0

'मेरे कोड को कैसे सुधारें' प्रश्न वास्तव में स्टैक ओवरफ्लो तरीके नहीं हैं: एस डाउनवोट नहीं होगा, अच्छा परिणाम :) – nilsK

+0

शायद सवाल स्पष्ट रूप से यह नहीं बताता है लेकिन मैंने सोचा कि ऐसा करने का एक बेहतर तरीका होना चाहिए। कुछ विधि जो मुझे दस्तावेज या कुछ में नहीं मिला :) धन्यवाद :) – Ralphz

उत्तर

11

आप चांदा> 1.3.0 का उपयोग कर रहे हैं, तो आप निम्न कर सकते हैं:

var values = element(by.model('regObj.profileType')). 
       all(by.tagName('option')).getAttribute('value'); 
expect(values).toEqual(['', 'aa', 'bb', 'cc']); 
संबंधित मुद्दे