Tut Treiber.verwalten().timeouts().implicitlyWait(10000, TimeUnit.SEKUNDEN) nur für-element-Suche?
Ich möchte wissen, die Verwendung von
- Treiber.verwalten().timeouts().implicitlyWait(10000, TimeUnit.SEKUNDEN);
Wird es nur verwendet werden für-element-Suche oder für andere Zwecke, wie zum Seite laden und aktualisieren?
Ich bin mit diesem in der begginning der Treiber-Initialisierung.
Aber In meiner Anwendung möchte ich untersuchen Fehlermeldung nach der Eingabe von falschen Passwort,aber sobald ich ein Falsches Kennwort eingeben,wird die Seite verlassen und nicht warten, bis die Fehlermeldung auf der gleichen Seite.Wird es initialisieren/laden Sie die Seite nur einmal,Wenn ich Thread.Schlaf(3) es Stoppt bei der Seite für 3 Sekunden und richtig Lesen die Fehlermeldung.
Aber ich möchte nicht mit Thread.schlafen,da ich mich schon mit Fahrer.verwalten().timeouts().implicitlyWait(0, TimeUnit.SEKUNDEN)
Kann jemand mir bitte sagen, seine Verwendung und wie ich diesen Fehler beheben?
Code-Snippet:(Funktioniert Nicht,Rückgabe bei FEHLER)
(Ohne Gewinde.Schlaf)
setText(WebElements.TEXT_BOX, PASSWORD);
click(WebElements.SUBMIT_BUTTON);
//Thread.sleep(3000);
if (isElementPresent(WebElements.ERROR_MESSAGE)) {
return SUCCESS;
}
else
return FAILURE;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den wichtigsten Unterschied zwischen den Implizite und Explizite wartet, ist, dass das Implizite warten, fragt die DOM für den vorgegebenen Zeitraum(sagen wir mal 10s) und sieht für die Elements während Expliziten warten in regelmäßigen Abständen sendet die Anfrage an den server, und überprüfen Sie das element im DOM.
Das Implizite warten, ist fest und fest mit der Treiber-Instanz. Also, wenn Sie, dass es Zeit ist für die gesamte Treiber-Instanz und überall angewandt. Mit, dass, wenn Sie irgendeinen Befehl, um ein element, dem er fragt den DOM-für, dass eine definierte Menge Zeit ohne zu reden an den server senden/andere Anfrage regelmäßig, und schließlich wirft exception, wenn nichts gefunden wurde.
Auf der anderen Seite Explizite warten hat ein Standard-Zeit 500ms schläft es, sofern Sie nicht explizit überschrieben. Was bedeutet, es wirkt als
Thread.sleep();
zwischen den Intervallen und schläft für 500ms, und danach sendet die Anfrage an den server und überprüft regelmäßig, ob die element-und die von Ihnen festgelegten Bedingungen mit einem polling-Intervall definiert und erreicht den timeout.So, in Ihrem Fall die
Thread.Sleep()
arbeitet als Explizite warten. Die richtigen Auflösungen ist natürlich die Verwendung Explizite warten und überprüft regelmäßig, ob für das element, und es wird erwartet Zustand.Erste, Sie tun etwas auf. Dann teh Seite ändert. Bevor Sie anrufen isElementPresent(), wie werden Sie wissen, wenn die Seite bereits geladen?
Besser wäre, nicht zu verwenden implicitlyWait() und schlafen(). Verwenden FluentWait:
https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/ui/FluentWait.html
FluentWait in regelmäßigen Abständen überprüft, wenn der Zustand "true". Wenn nicht (z.B. wenn die Seite noch nicht komplett geladen), wartet einige Zeit und prüft wieder.
Ich schlage vor, Sie verwenden die explizite warten, wie unten angegeben
Unterschied zwischen Unterschied Zwischen Impliziten, Expliziten & Fließend Warten, können Sie finden hier