Strona główna > Jak zrobić asercję na to czy element istnieje?

Jak zrobić asercję na to czy element istnieje?

Czasami w testach Selenium potrzebujemy napisać asercję, która sprawdzi, czy dany element został wyświetlony na stronie. Dla przykładu, po nieudanej próbie logowania powinniśmy otrzymać komunikat, że coś poszło nie tak. Nie zawsze będzie nas obchodzić treść komunikatu – możliwe, że jest już sprawdzana w testach innego poziomu. To, czego potrzebujemy, to informacja, czy komunikat w ogóle się pojawił. Jak ją zdobyć?

Trochę praktyki

W końcu praktyka czyni mistrza. 😉 Możecie w tym celu użyć mojej aplikacji testowej. Gdy usuniecie produkt z koszyka, zobaczycie komunikat, że produkt został usunięty. W teście nie będzie nas interesować sama treść komunikatu. Potrzebujemy jedynie sprawdzić, czy poniższy komunikat (ten na zielono) został wyświetlony.

Informacja o usuniętym produkcie

To, czy element został wyświetlony na stronie, możemy sprawdzić asercją. Zanim ją skonstruujemy, musimy napisać kod, który doda produkt do koszyka, usunie go i poczeka, aż liczba produktów w koszyku zaktualizuje się.

Asercja – jak sprawdzić, czy element istnieje?

W przykładzie skorzystamy z JUnita i tak samo, jak w innych bibliotekach do testów, nie znajdziemy tu metody w stylu “WebElement nie istnieje”. Musimy coś wykombinować sami. Zastanówmy się, co się stanie, gdy za pomocą metody findElement() spróbujemy zlokalizować element, którego nie ma? Otrzymamy wyjątek. Jeżeli więc element istnieje, żadnego wyjątku nie dostaniemy i właśnie na to musimy zrobić asercję.

W JUnit taka asercja to assertDoesNotThrow(). Używamy jej w poniższy sposób:

Dlaczego nie isDisplayed()?

W sytuacjach podobnych do tej, którą przedstawiłam wyżej, niektórych może kusić użycie metody isDisplayed(). Ta metoda zwraca informację o tym, czy element jest wyświetlony i widoczny na ekranie. Jednak element może być ukryty za pomocą CSS (np. display: block) i właśnie w takim scenariuszu z tą metodą jest problem. Ale to nie jedyny problem. Zmieńmy kod na taki, który używa metody isDisplayed() i sprawdźmy, co się stanie.

Przypadek pozytywny

Weźmy pod uwagę pozytywny przebieg testu, czyli taki, gdzie usuwając produkt z koszyka zobaczymy komunikat na stronie. W takim wypadku wszystko działa elegancko: asercja przejdzie na zielono, wszyscy będą klaskać, a Twoja mama będzie z Ciebie dumna mimo, że nadal nie wie na czym polega Twoja praca.

Przypadek negatywny

Teraz na stronie mamy błąd i komunikat się nie wyświetla. Pytanie za 100 punktów: co się stanie z asercją? Nic, w ogóle się nie wykona. A dlaczego? A dlatego, bo poleci wyjątek. Przecież elementu nie ma na stronie, zatem findElement() w asercji zwróci błąd i nie wykona się ani isDisplayed() ani cała asercja.

“Ale o co Ci chodzi, test się wysypał, świeci się na czerwono, a nie na zielono, więc nie przeszedł, nie? Wszystko się zgadza.”

– Jakiś Tester


Jeżeli chcemy za każdym razem, gdy to się zdarzy, dłubać w teście i rozkminiać dlaczego poleciał wyjątek, to spoko. Natomiast po to mamy asercje i komunikaty w asercjach, żeby z nich korzystać i żeby zrozumienie o co biega zajęło nam 3 sekundy, a nie pół godziny.

Druga sprawa, że testy (a właściwie asercje) powinno się testować. Gdybyśmy przetestowali naszą asercję z isDisplayed() odkrylibyśmy, że nie działa tak jakbyśmy tego chcieli. O tym jak testować asercje oraz o mnóstwie innych rzeczy związanych z automatyzacją testów piszę w eBooku “Wprowadzenie do automatyzacji testów”. Dowiesz się z niego także co automatyzować a czego nie, z czego składa się test oraz ile asercji powinno być w teście.

A jak zrobić asercję na to czy element jest widoczny?

Bardzo podobnie. Nadal posłużymy się assertDoesNotThrow(), tylko “do środka” wpakujemy czekanie na to, aż element będzie widoczny. Jeżeli będzie, to test przejdzie na zielono. Jeżeli nie, to dostaniemy wyjątek i asercja zwróci błąd.

Dlaczego jest to ważne?

Testy bez asercji są gorsze niż pączek bez nadzienia. Jak pisałam tutaj, asercje to serce każdego testu automatycznego. Po tym tekście Wasze asercyjne skille na pewno przybrały na mocy, ale gdyby jeszcze było Wam mało, zapraszam Was na krótką lekcję o asercjach wielokrotnych (grupowych). Wciąż masz pytania? Daj znać co Cię gryzie. I czy wolisz pączki z różą czy z czekoladą i dlaczego z różą.