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# 16. Timeouty

W tej lekcji omówimy sobie timeouty, czyli coś co posłuży nam pośrednio do stabilizacji naszych testów i zapewnienia, że strona się załadowała oraz, że elementy próbujemy wyszukać elementy, gdy są one już dostępne na stronie.

 

Timeouty: linki i materiały

W tej lekcji napiszemy sobie „test”. Test jest w cudzysłowie, bo tak naprawdę nic tam nie testujemy, nie ma tam żadnej asercji ale i tak jakąś informację o działaniu testowanej funkcjonalności dostaniemy, na podstawie wyjątku, który zostanie lub nie zostanie rzucony. Będzie to pretekst, żeby ci pokazać co się dzieje, gdy nie zapewnimy sobie obecności elementu na stronie, gdy próbujemy go wyszukać.

ImplicitWait

ImplicitWait jest pierwszym z timeoutów jaki sobie omówimy. Sygnatura tej właściwości znajduje się w interfejsie ITimeouts i można ją zarówno odczytać jak i zapisać (get i set). O tym czym są właściwości wspominałam w jednej z poprzednich lekcji.

ImplicitWait działa tak, że gdy ustawimy go np. na pięć sekund, to wyszukując elementy Selenium poczeka maksymalnie 5 sekund na ich pojawienie się.

Po co nam takie coś w ogóle? A no dlatego, że elementy na stronie potrzebują często czasu na załadowanie się nawet jeżeli strona się już załadowała. Przykładem jest test z tej lekcji, w którym po dodaniu produktu do listy życzeń musimy chwilę poczekać na komunikat o poprawnym dodaniu produktu do listy.

ImplicitWait zachowuje się odrobinę inaczej w zależności od tego czy używamy metody FindElement, czy FindElements. W przypadku wyszukiwania pojedynczego elementu za pomocą FindElement, driver będzie odpytywał stronę tak długo aż znajdzie element pasujący do lokatora, ale nie dłużej niż podany timeout. Jeżeli w ciągu podanego timeoutu, np. wspomnianych 5 sekund, element nie zostanie znaleziony na stronie, dostaniemy wyjątek NoSuchElementException i test zostanie przerwany.

W przypadku, gdy używamy metody FindElements, a więc szukamy wielu elementów, driver będzie odpytywał stronę tak długo, aż znajdzie przynajmniej jeden element odpowiadający podanemu przez nas lokatorowi, ale nie dłużej niż podany przez nas timeout. Jeżeli w ciągu podanego timeoutu, czyli np. 5 sekund, żaden element nie zostanie znaleziony na stronie, nie dostaniemy błędu, a po prostu pustą listę elementów.

Dodam jeszcze, że gdy nie ustawimy sobie ImplicitWait, domyślną wartością będzie 0, czyli w ogóle nie będziemy czekać na elementy i jak ich nie będzie od razu to dostaniemy wyjątek lub pustą listę elementów.

PageLoad

PageLoad jest timeoutem na załadowanie strony, czyli jest ilością czasu, jaką będziemy czekać aż strona się załaduje. Właściwość PageLoad również ma swoją sygnaturę w interfejsie ITimeouts.

Tutaj sprawa jest prosta i oczywista może poza jedną informacją. Gdy nie ustawimy tego timeoutu dla swoich testów domyślny to aż 300 sekund. Warto się zastanowić czy na pewno nie chcemy tego nadpisać jakąś mniejszą wartością, bo gdy strona rzeczywiście nie będzie się ładowała, może się okazać, że taki test, który nie będzie miał szansy wykonać kolejnych kroków i tak będzie trwał co najmniej 300 sekund. Poza tym, jeżeli oczekujemy, że strona będzie się ładowała np. poniżej 10 sekund, to może warto też to pośrednio testować właśnie przy pomocy tego timeoutu.

Wsparcie merytoryczne

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