Codice 1:comportamento errore "Stale elemento di riferimento" undestanding
element(by.id('myButtonId')).click();
return element(by.id('myValidationSummaryId')).getText().then(function (val) {
return val;
});
Sopra codice ha funzionato bene molte volte e poi ha cominciato dando sotto l'errore
"Impossibile: di riferimento Elemento stantio: Elemento non è collegato alla pagina documento "
questo id 'myValidationSum maryId 'non è dove usato in precedenza, facendo clic sul modulo dei post dei pulsanti e sul messaggio di successo/fallimento disponibile dal lato del servizio in' myValidationSummaryId '.
Codice 2:
return element(by.id('myButtonId')).click().then(function() {
return element(by.id('myValidationSummaryId')).getText().then(function (val) {
return val;
});
});
codice di fissaggio come sopra emissione iniziale fisso e ha funzionato costantemente bene molte volte ma in seguito iniziato avendo casualmente con errore elemento di riferimento stantio originale.
Codice 3:
return element(by.id('myButtonId')).click().then(function() {
return element(by.id('myValidationSummaryId')).waitReady().then(function (isReady) {
if (isReady) {
return element(by.id('myValidationSummaryId')).getText().then(function (val) {
return val;
});
} else {
return 'Failed to check success/failure message';
}
});
});
Poi ho fissato codice come sopra e ora funziona benissimo in modo coerente, waitReady funzione attivamente attendere un elemento presente e visualizzato fino a tempo specificato.
Non dovrebbe il goniometro/WebdriverJS supposto per gestire questi problemi in modo nativo.
1> potresti spiegare perché il codice 1 e il codice 2 a volte hanno funzionato e qualche volta hanno fallito?
2> pensi che il codice 3 ora stia bene e si aspetti che funzioni ogni volta?
Elemento 'myValidationSummaryId' utilizzato solo una volta e dopo il clic in modo che se le pagine non sono caricate completamente e se l'elemento non è ancora disponibile dovrebbe dire Nessun elemento trovato ma perché riferimento elemento stantio? Ho usato pageLoadTimeout come 5 minuti e la pagina viene caricata in pochi secondi. Questa non è un'applicazione AngularJS e browser.ignoreSynchronization = true.
ovunque si parli di quale codice è in grado di risolverlo ma non si trova molto sul perché questo comportamento e perché WebdriverJS non sia in grado di gestirlo.
Sì, attesa esplicito è il solito modo per risolvere i problemi come questi. Ma, ho avuto la stessa domanda esatta, perché a volte le attese sono effettivamente necessarie e il goniometro non dovrebbe gestirle in modo naturale. Una cosa che il goniometro non riconosceva nel mio caso era un'animazione - se ci fosse un'animazione che mostrava un elemento dovevo usare le attese. Ottima domanda! – alecxe
Posso confermare che ho avuto lo stesso errore oggi. Senza alcun motivo, qualsiasi codice viene modificato e i test iniziano a non riuscire. Per quanto riguarda il comportamento del goniometro strano - posso raccomandare ** async ** come un modo per domarlo. Se ** async ** non aiuta, allora lancio l'asciugamano. –