2014-09-30 3 views
8

Nei miei test ho dovuto verificare se tutti i valori previsti sono presenti in una casella di selezione. Mi c'è voluto un po 'ma alla fine ho creato questa funzione di supporto:Il goniometro ottiene tutti i valori della casella di selezione (opzione)

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

Funziona, ma sembra davvero brutto per me. C'è un modo migliore per farlo?

EDIT:

Dopo altre due ore di lettura di documentazione ho ottenuto la mia funzione di supporto ridotto a:

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

ben fatto! puoi aggiungerlo come risposta alla tua stessa domanda. –

+0

"come migliorare il mio codice" le domande non sono in realtà il modo StackOverflow: s non sarà downvote, ottimo risultato :) – nilsK

+0

Forse la domanda non lo dice chiaramente ma ho pensato che ci fosse un modo migliore per farlo. Alcuni metodi che non ho trovato nella documentazione o qualcosa :) Grazie :) – Ralphz

risposta

11

Se si utilizza goniometro> 1.3.0, è possibile effettuare le seguenti operazioni:

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