2016-08-04 14 views
0

Selenium Webdriver müssen 30 Sekunden und 5 Sekunden warten, wo es im Code erwähnt wird. Aber bemerkt, dass der Webdriver das überspringt. Was ist der Grund und wie kann ich den Webdriver warten lassen?Implizite wartet nicht auf die angegebene Dauer in dem unten genannten Code

System.out.println("Before 5"+date.toString()); 

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

System.out.println("After 5"+date.toString()); 

Link zum vollständigen Code kann hier https://drive.google.com/file/d/0B4SgyzyvwKhiUk9KVldTa2ZGUkE/view?usp=sharing

+0

Können Sie bitte lassen Sie mich wissen, auf welche Basis du sagst dass es nicht wartet? Wird "NoSuchElemett" oder Element nicht gefunden, ohne dass man 5 Sekunden warten muss? – Siva

+0

kein Fehler. Herausgefunden durch Drucken der Zeit vor dem Warten und nach dem Warten. –

+0

Bitte lesen Sie die geschriebene Antwort. – Siva

Antwort

1

Implizite Warte funktioniert nicht wie die normalen Thread.sleep() wo Sie 5s setzen Zeit und Ihr Haupt-Thread wird für 5 Sekunden angehalten und warten, gefunden werden.

Es wird mit der WebDriver Instance arbeiten, wo es auf ein bestimmtes Element auf einer Webseite warten wird, um für die in der Wartezeit erwähnte Zeit zu erscheinen. Wenn keine Elemente zum Identifizieren vorhanden sind, d. H. Das Element ist bereits in dom geladen, wartet Ihre implizite Wartezeit nicht auf diesen Zeitraum. So

, wenn Sie sagen: -

System.out.println("Before 5"+date.toString()); 
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
System.out.println("After 5"+date.toString()); 

Es wird Ihnen nicht zeigen die Zeitdifferenz von 5 Sekunden.

Wenn es ein Element gegeben hätte, das nicht in dom geladen ist, hätte es 5 Sekunden warten müssen.

System.out.println("Before 5"+date.toString()); 
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
driver.findElement(By.id("some id")).sendKeys("Some Text") 
System.out.println("After 5"+date.toString()); | 
               |------- Here if the element isn't loaded in dom, then webdriver would wait for 5 seconds. 

Mehr Informationen über Waits

+0

Hi @pArAs, danke für die Antwort. Habe einen Vorschlag. Vor kurzem habe ich einen Kommentar von SO bekommen, in dem ich gebeten habe, nicht auf externe Seiten zu antworten. Wenn die externe Seite in Zukunft entfernt wird, kann es für die Benutzer schwierig sein, eine richtige Antwort zu erhalten, während der Thread verwiesen wird. Daher wird empfohlen, den nützlichen Inhalt in die Antwort selbst einzufügen. – Siva

+0

Deshalb habe ich meine Antwort geändert, um sie anhand von 2 Codebeispielen zu erklären. Ich habe nur eine weitere Referenz zu verstehen. Stattdessen würde ich den Verweis auf die Haupt-Website "Selenium" aktualisieren. – Paras

0

Sie wollen versuchen 5s.You kann warten:

  1. Thread.sleep(5000);
  2. (new WebDriverWait(driver, 5)) .until(new ExpectedCondition<WebElement>()