2012-12-20 11 views
5

Laut Selen fragt eine implizite Wartezeit das DOM für eine bestimmte Zeit ab, um festzustellen, ob ein Element angezeigt wird. Mein Verständnis ist, dass es bis zu einer bestimmten Zeit abfragen wird, aber wenn ein Element vorher auftaucht, wird es weitergehen, ohne weiter zu warten.Selen implizite Wartezeit vs Thread.sleep()

http://seleniumhq.org/docs/04_webdriver_advanced.html

Ich habe ein Verfahren, das in etwa 13 Sekunden ausgeführt wird. Wenn ich die implizite Wartezeit auf 100 Sekunden festlege, dauert es 213 Sekunden.

driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS); 

Es scheint, dass ich während dieser Methode 2 mal (je 100 Sekunden) warte. Das Setzen der impliziten Wartezeit auf 0 oder 100 hat keinen Einfluss auf meine Methode. In beiden Fällen werden sie korrekt beendet.

Meine Frage ist dies. Ich dachte, dass das implizite Warten auf die kürzeste Zeit wartet, bis ein Element auftaucht. Ist das richtig? Oder mache ich etwas falsch?

Außerdem, warum wartet es 2 mal, wenn es anscheinend nicht warten muss? (Meine Methode beendet richtig, auch wenn ich die Wartezeit auf 0 gesetzt) ​​

+0

mögliche Duplikate von [Selen webdriver - explizite warten vs implizite warten] (http://stackoverflow.com/questions/10404160/selenium-webdriver-explicit-wait-vs-implicit-wait) – lesmana

Antwort

4

Kurze Antwort:

implizite Warte - Es ist globale Einstellung gilt für alle Elemente und wenn das Element erscheinen, bevor die Zeit als Skript angegeben wird gestartet sonst Skript ausgeführt wird Werfen Sie NoSuchElementException. Die beste Methode zur Verwendung in der Setup-Methode. Betrifft nur By.findelement().

Thread.sleep() - Es wird Zeit für Skript schlafen, nicht eine gute Möglichkeit, im Skript zu verwenden, da es Schlaf ohne Bedingung ist.

+0

Was passiert, wenn der Fahrer zu einem anderen URL, ist das implizite Warten immer noch effektiv? oder muss ich es noch einmal abrufen? – 8090PZ

+0

ma, wirksam für die Dauer des Laufs unabhängig von der URL. Beachten Sie, dass es für findElements möglich ist, size() == 0 zu erwarten. Aber Selenium wird die letzte angegebene Zeit warten. Wenn die Seite zum Zeitpunkt des Tests geladen wird, führt das Reduzieren der impliziten Wartezeit (z. B. 1 Sekunde) vor den findElements und das anschließende Zurücksetzen auf normale Werte zu schnelleren Ausführungszeiten. –