2015-06-22 27 views
5

Jestem nowy w sterowniku sieciowym i napisałem skrypt selenowy do aplikacji internetowej, która zawiera backbone.js i select2.Czy to jest najlepsza praktyka, aby użyć Thread.sleep() lub wyraźnego oczekiwania przed kliknięciem dowolnego elementu w selenowym sterowniku sieciowym

kiedyś dostać NosuchElementException i element nie jest klikalne wyjątki często. Więc zdecydowałem się skrypować jak poniżej, - przed kliknięciem dowolnego elementu, będzie czekać na istnienie elementu przy użyciu wyraźnego oczekiwania. tj. Przed kliknięciem dowolnego elementu poczeka, aż element zostanie załadowany.

Czy najlepiej jest czekać na każdy element przed kliknięciem?

Odpowiedz

9

Wyraźnie czekał na pewnym elemencie a jej pewien stan jest najlepszą praktyką w selenu-webdriver. Sleeps nigdy nie są dobrym pomysłem, ponieważ Twój limit czasu snu może być mniejszy lub większy i dlatego test jest niekonsekwentny i niedeterministyczny.

Korzystanie WebDriver wait until jest najlepszym rozwiązaniem do synchronizacji problemów. Więc w JS coś takiego,

var until = webdriver.until; 
var searchBox = 
driver.wait(until.elementIsEnabled(driver.findElement(webdriver.By.name('q'))),5000,'Search button is not enabled'); 
2

Korzystanie Explicit czekać sugeruje oczekiwania wykonywać żadnych działań na webelement zamiast Thread.Sleep() jako najlepszej praktyki.

Jawne oczekiwanie w selenie jest równoważne Thread.sleep() z określonym warunkiem. Oznacza to, że nawet jeśli użyłeś opcji Jawne lub Niejawne, pośrednio użyłeś Thread.sleep(). Różnica polega na tym, że określasz warunki oczekiwania i wiesz, kiedy rzucić błąd, jeśli czas oczekiwania upłynął.

Jeśli znasz dokładny czas Twojego oczekiwania Thread.Sleep() może być używany, ale lepiej unikać go. Testowanie może zostać spowolnione, jeśli czas oczekiwania jest dłuższy i może się nie powieść, jeśli czas oczekiwania jest krótszy.

5

Korzystanie wyraźne oczekiwania/niejawny oczekiwania jest najlepsze praktyki, pozwala sprawdzić, co rzeczywiście wyraźne oczekiwanie, Thread.Sleep(), logika pracy niejawna Wait za

Explicit oczekiwania: An wyraźne oczekiwania jest rodzajem oczekiwania na wystąpienie określonego warunku przed kontynuowaniem kodu.

niejawny oczekiwania: Pośrednia oczekiwania jest powiedzieć WebDriver odpytywanie DOM przez pewien okres czasu, próbując znaleźć element lub elementy, o ile nie są one natychmiast dostępne. Domyślne ustawienie to 0

Thread.sleep() W kodzie uśpienia zawsze będzie czekać na wymienione sekundy z boku nawiasów, nawet jeśli strona robocza jest gotowa po 1 sekundie. To może spowolnić testy.