Strona główna > Wyjątki w Selenium: 5 najczęstszych

Wyjątki w Selenium: 5 najczęstszych

Wyjątki w Javie, a tym samym wyjątki w Selenium to takie obiekty, które możemy “rzucać”. Robimy to za pomocą słowa kluczowego throws. Rzucenie wyjątku (i jego nieobsłużenie) spowoduje ubicie wątku. Gdy mówimy o testach, pojawienie się wyjątku spowoduje przerwanie testu.

Każdy, kto próbował coś napisać w Selenium na pewno się nadział na większość poniższych wyjątków. Z czasem te wyjątki będziesz rozszyfrowywać bez problemu, ale na początku budzą one lekką konsternację. Poniżej podrzucam pięć najczęstszych wyjątków w Selenium, jakie się przydarzają testelkowym studentom oraz co robić, jak je zobaczymy.

ElementClickInterceptedException

Leci wtedy, gdy wskazany element nie może zostać kliknięty, bo jest w jakiś sposób przesłonięty, np. innym elementem. Takim przykładem może być banner z informacją o ciasteczkach albo jakieś wyskakujące okno przesłaniające inny element na stronie. W takim wypadku musimy najpierw obsłużyć właśnie ten przesłaniający element. Jeżeli to okno lub banner, to trzeba je zamknąć. Czasami pomaga też przescrollowanie się do elementu, który chcemy kliknąć, za pomocą JavaScriptu (ale to zależy od przypadku).

NoSuchElementException

Występuje, gdy Selenium nie jest w stanie znaleźć elementu na podstawie podanego lokatora. Jeżeli, Selenium mówi, że elementu nie ma, to cudów nie ma: ten element nie istnieje w określonym kontekście w momencie kiedy nasz program próbuje go tam znaleźć. Powodów takiej sytuacji może być kilka: źle zbudowaliśmy lokator, jesteś na innej stronie niż myślisz, element jest w ramce albo w shadow root lub element nie zdążył się załadować w momecie w którym Selenium go szukało. Sprawdź po kolei każdą z tych opcji, gdy zobaczysz ten wyjątek.

StaleElementReferenceException

Ten wyjątek poleci, gdy element został poprawnie znaleziony przez Selenium ale potem się zmienił (np. dostał dodatkową klasę) lub został usunięty z dokumentu HTML. Czasami wydaje nam się, że strona się już w pełni załadowała ale dociąga się na przykład jakiś skrypt, który coś zmienia w elemencie. Z reguły gdy oczekuję elementu na stronie (i nawet oczami widzę, że tam jest), a nadal dostaję ten wyjątek, staram się zorientować co się zmieniło. Jeżeli to jest jakaś dodatkowa klasa, któej wcześniej nie było, buduję lokator, który uwzględnia tę klasę. W ten sposób mój lokator pasuje tylko do “odświeżonego” elementu. Nie wykryję go więc zanim dostanie nową klase i tym samym nie dostanę tego wyjątku.

InvalidSelectorException

To na przykład wtedy, kiedy wybieramy selektory CSS jako metodę lokalizowania elementów, ale wprowadzamy XPatha 🙂 Po prostu składnia lokatora jest nieprawidłowa. W przypadku tego błędu po prostu sprawdź co jest nie tak z Twoim lokatorem. Lokatory możesz testować w narzędziach deweloperskich. Wciśnij F12 będą w Chrome i przejdź do zakładki Elements w nowo otwartym oknie z narzędziami deweloperskimi. Następnie wciśnij CTRL+F. Na samym dole pojawi się wąskie pole: tam możesz wpakować swój sleektor CSS albo XPath i go przetestować.

TimeoutException

Ten wyjątek zobaczymy, gdy jakaś komenda nie będzie miała wystarczająco dużo czasu na wykonanie się. Przykład: ustawimy pageLoadTimeout na 2 sekundy, a strona do załadowania potrzebuje 5 sekund. Wtedy wyjątek poleci na driver.get(”url_strony”). W takim wypadku z reguły wystarczy zwiększenie timeoutu. No chyba, że na przykład strona nie może się załadować przez minutę, to wtedy zgłosiłabym to jako błąd.

Masz jakiś swój “ulubiony” wyjątek Selenium, który doprowadza Cię do szału? Odezwij się do mnie i podaj przykład 😀

Zobacz także 3 wyjątki w Javie, które budzą grozę.