Sto scrivendo un test del goniometro che deve attendere che un attributo elemento abbia un valore non vuoto e quindi voglio restituire quel valore alla funzione chiamante. Questo ha dimostrato di essere più difficile da scrivere di quanto mi aspettassi!ottiene il valore di attributo elemento in Goniometro
Sono in grado di pianificare correttamente un comando browser.wait()
per attendere che l'attributo elemento abbia un valore non vuoto e ho verificato che questo valore sia in realtà quello che mi aspetto di ottenere all'interno della funzione di callback, ma per alcuni motivo, non sono in grado di restituire tale valore al di fuori della funzione di callback e sul resto del codice di test.
Ecco come il mio codice è simile:
function test() {
var item = getItem();
console.log(item);
}
function getItem() {
var item;
browser.wait(function() {
return element(by.id('element-id')).getAttribute('attribute-name').then(function(value) {
item = value;
// console.log(item);
return value !== '';
});
});
return item;
}
posso dire che l'ordine di esecuzione non è come mi aspettavo che fosse, perché quando ho rimuovere il commento dalla console.log()
chiamata all'interno della funzione di callback, vedo il valore atteso stampato Tuttavia, la stessa chiamata nella funzione test()
stampa 'indefinito'.
Cosa sta succedendo qui? Cosa mi manca? Come posso ottenere correttamente il valore dell'attributo dalla funzione di callback?
Apprezzo il vostro aiuto.
Grazie! Con alcune correzioni minori, l'ultimo approccio funziona nel mio caso. Speravo di essere in grado di restituire il valore dell'oggetto direttamente alla funzione chiamante, ma a quanto pare questo non è il modo giusto di pensare quando si tratta di promesse in chiamate asincrone. L'ultima riga dovrebbe essere "return item.promise;". – exbuddha