Code 1:"Stale Element Referenz" Fehlerverhalten undestanding
element(by.id('myButtonId')).click();
return element(by.id('myValidationSummaryId')).getText().then(function (val) {
return val;
});
Above Code hat gut funktioniert oft und dann begann es unten Fehler geben
„Fehler: abgestanden Element Referenz: element ist nicht an die Seite angehängt Dokument "
Diese ID 'myValidationSum maryId 'ist noch nie zuvor verwendet worden, indem Sie auf das Formular "buttons posts" geklickt haben und auf der Seite "myValidationSummaryId" auf der Seite "service/side" eine Fehlermeldung angezeigt wurde.
Code 2:
return element(by.id('myButtonId')).click().then(function() {
return element(by.id('myValidationSummaryId')).getText().then(function (val) {
return val;
});
});
Fixing Code wie oben fest Erstausstellung und es funktionierte durchweg fein viele Male aber später begann es zufällig mit Original abgestanden Element Referenzfehler fehlschlägt.
Code 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';
}
});
});
Dann befestigte ich Code wie oben, und jetzt funktioniert es konsequent in Ordnung, waitReady Funktion aktiv für ein Element warten vorhanden und angezeigt auf bestimmte Zeit.
Sollte Winkelmesser/WebdriverJS dies nicht behandeln, Probleme natürlich.
1> Könnten Sie bitte erklären, warum Code 1 und Code 2 irgendwann funktionierten und manchmal fehlgeschlagen sind?
2> Denkst du, Code 3 ist jetzt in Ordnung und sollte jedes Mal funktionieren?
Element 'myValidationSummaryId' wird nur einmal und nach dem Klick verwendet, wenn Seiten nicht vollständig geladen sind und wenn das Element noch nicht verfügbar ist, sollte es Kein Element gefunden werden, aber warum veraltete Elementverweis? Ich habe pageLoadTimeout als 5 Minuten verwendet und die Seite wird in wenigen Sekunden geladen. Dies ist keine AngularJS-Anwendung und browser.ignoreSynchronization = true.
überall wo es darüber sprach, welcher Code es beheben kann, aber nicht viel darüber gefunden, warum dieses Verhalten und warum WebdriverJS selbst nicht in der Lage ist, damit umzugehen.
Ja, explizite Warte der üblicher Weg ist, um Probleme wie diese zu lösen. Aber, ich hatte genau die gleiche Frage, warum manchmal Wartezeiten tatsächlich notwendig sind und sollte Winkelmesser natürlich nicht behandeln. Eine Sache, die ein Winkelmesser in meinem Fall nicht erkannte, war eine Animation - wenn es eine Animation gäbe, die ein Element zeigt, das ich benutzen musste. Gute Frage! – alecxe
Ich kann bestätigen, dass ich heute genau den gleichen Fehler hatte. Ohne Grund änderte sich der Code und Tests begannen zu versagen. Was das Verhalten des seltsamen Winkelmessers anbetrifft - ich kann ** async ** empfehlen, um es zu zähmen. Wenn ** async ** nicht hilft, dann werfe ich das Handtuch. –