2012-12-20 10 views
5

Według selenu, domyślne czekanie odpytuje DOM przez określony czas, aby sprawdzić, czy element się pojawi. Rozumiem, że będzie on sondować do określonego czasu, ale jeśli element pojawi się wcześniej, to będzie kontynuowany bez czekania dalej.Selenium implicit wait vs Thread.sleep()

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

mam sposobu, który prowadzi się w około 13 sekund. Kiedy ustawię niejawne oczekiwanie na 100 sekund, zajmuje to 213 sekundy.

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

Wygląda na to, że podczas tej metody czekam 2 razy (po 100 sekund). Ustawienie domyślnego czasu oczekiwania na 0 lub 100 nie ma wpływu na moją metodę. W obu przypadkach zakończyły się poprawnie.

Moje pytanie jest takie. Pomyślałem, że domyślne oczekiwanie czeka na najkrótszy czas na pojawienie się elementu. Czy to jest poprawne? Czy robię coś złego?

Ponadto, dlaczego czeka 2 razy, kiedy najwyraźniej nie trzeba czekać? (Moja metoda zakończy poprawnie nawet jeśli ustawić czas oczekiwania na 0)

+0

możliwy duplikat [selenium webdriver - wyraźne oczekiwanie vs domniemane oczekiwanie] (http://stackoverflow.com/questions/10404160/selenium-webdriver-explicit-wait-vs-implicit-wait) – lesmana

Odpowiedz

4

Krótka odpowiedź:

niejawna czekać - To ustawienie globalne zastosowanie do wszystkich elementów i jeśli elementu pojawiają się przed określonym czasie niż skrypt rozpocznie wykonywanie inaczej skrypt będzie rzut NoSuchElementException. Najlepszy sposób użycia w metodzie instalacji. Dotyczy tylko By.findelement().

Thread.sleep() - Będzie to czas uśpienia skryptu, a nie dobry sposób użycia w skrypcie, ponieważ jest bezsenny.

+0

Co zrobić, jeśli kierowca ma inny adres URL, czy ukryte oczekiwanie jest nadal skuteczne? czy muszę to jeszcze raz przywołać? – 8090PZ

+0

ma, skuteczne przez cały czas trwania niezależnie od adresu URL. Zauważ, że dla findElements można się spodziewać wielkości() == 0. Ale Selen będzie czekać na ostatni określony czas. Jeśli strona zostanie załadowana w czasie testu, skrócenie domyślnego czasu oczekiwania (np. 1 sekundy) przed znalezieniem elementu FindElements, a następnie przywrócenie normalnego poziomu, spowoduje skrócenie czasu wykonania. –