Zapisy otwarte! Dołącz do kursu Selenium w Javie lub Selenium w C#. Tylko do 23.09.2021 do godz. 21:00. Zapisz się tutaj.

Selenium w C# 21. Explicit Wait, czyli jawne czekanie

W tej lekcji poznasz Explicit Wait, czyli jawne czekanie. Jest to kolejny obok Implicit Wait (niejawne czekanie) sposób na poczekanie na elementy na stronie. Między tymi dwoma rozwiązaniami są jednak różnice, gdzie najważniejszymi jest fakt, że Explicit Wait potrafi poczekać na różne warunki (a Implicit Wait po prostu na pojawienie się elementu) oraz że w Implicit Wait możemy ustawiać różny czas czekania na jakiś warunek, podczas gdy w Explicit Wait ustawiamy to dla danej instancji drivera.

Explicit Wait: linki i materiały

Explicit Wait przyda nam się przede wszystkim w sytuacjach, w których chcemy poczekać na coś innego niż po prostu na pojawienie się elementu. Możemy chcieć np. poczekać na zniknięcie elementu. Ma on też jeszcze taką przewagę nad Implicit Wait, a jest nią możliwość dostosowania czasu oczekiwania na spełnienie jakiegoś warunku osobno do każdej sytuacji. W tym celu musimy stworzyć nowy obiekt WebDriverWait.

Tworzenie obiektu WebDriverWait

Możemy użyć jednego z dwóch konstruktorów i oba z nich pokażę i nawet wyjaśnię jakie parametry przyjmują. Będziemy natomiast używać tylko jednego, tego prostszego z dwoma parametrami. Niełatwo mi wyobrazić sobie sytuację, w której ten bardziej rozbudowany konstruktor będzie Wam kiedyś potrzebny, ale ponieważ wciąż krótko żyję i nie wszystko widziałam, to tak jak wspomniałam, na filmie znajdziesz też wyjaśnienie co się dzieje w tym drugim konstruktorze.

Zatem na początek musimy stworzyć sobie obiekt typu WebDriverWait.

Ukryta treść

Nie masz dostępu do tego kursu. Wykup dostęp albo zaloguj się, by móc zobaczyć pełną lekcję.


Jak zatem widzisz musimy przekazać drivera oraz czas, jaki będziemy czekać na spełnienie warunku.

Czekanie

Żeby rzeczywiście na coś poczekać musimy wywołać metodę Until na stworzonym przez nas obiekcie (WebDriverWait). W metodzie Until jako parametr przekazujemy delegatę (o delegatach i wyrażeniach lambda było tutaj). W naszym przykładzie użyjemy wyrażenia lambda.

Ukryta treść

Nie masz dostępu do tego kursu. Wykup dostęp albo zaloguj się, by móc zobaczyć pełną lekcję.

Przykładowo powyższa linijka poczeka, aż liczba elementów odpowiadających podanemu selektorowi CSS będzie równa 0. Jest to przykład poczekania, aż zniknie loader, czyli ikonka informująca nas o tym, że jakiś proces jest w trakcie.

O czym jeszcze należy pamiętać

O tym, żeby się zdecydować czego będziemy używać. Implicit Wait oraz Explicit Wait nie powinny być używane w parze. Używanie jednego i drugiego może nam dać nieprzewidziane efekty.

Dobrze też zapamiętać, że jeżeli używamy Implicit Wait i element nie zostanie znaleziony to dostaniemy NoSuchElementException, a jeżeli nie doczekamy się na coś przy użyci Exmplicit Wait to otrzymamy WebDriverTimeoutException.

Bonus: budowanie lokatorów dla znikających elementów

Na filmie mamy przykład sytuacji, w której chcemy zbudować lokator dla elementu, który dosyć szybko znika i nie ma jak go „złapać” inspektorem normalnie. Jedną opcją jak sobie umożliwić zbudowanie lokatora do elementu jest pójście do developera, żeby Wam pokazała kod tego elementu. A drugą opcję, może nie zawsze dającą się użyć, ale niewymagającą chodzenia po ludziach, pokazuję na filmie.

Kod z lekcji

Ukryta treść

Nie masz dostępu do tego kursu. Wykup dostęp albo zaloguj się, by móc zobaczyć pełną lekcję.

Wsparcie merytoryczne

Nie masz dostępu do wsparcia merytorycznego dla tego kursu. Wykup dostęp albo zaloguj się, by móc zadawać pytania.