Strategia używania lokatorów w testach automatycznych. ID, CSS, czy XPATH?

Krótkie podsumowanie najlepszych praktyk dotyczących używania z lokatorów, głównie w kontekście Selenium WebDriver. Z których z nich powinniśmy korzystać? Co jest lepsze, XPATH czy CSS?

Selenium WebDriver udostępnia osiem strategii lokalizowania elementów. Poniżej streszczam, których z nich powinniśmy używać (i kiedy). Zacznijmy od tabeli zalet i wad każdego z nich.

Wady i zalety lokatorów

LokalizatorPrzykładZaletyWady
id, name, klasa CSSBy.name("sample-name")Najczęściej stabilny, prosty w użyciuPrzeważnie nie mamy możliwości ich użycia
tekst odnośnikadokładna wartość testowa w znaczniku HTMLProsty w użyciuWrażliwy na zmiany w opisach odnośników
nazwa znacznikadivProsty w użyciuBezużyteczny, jeśli na stronie jest więcej niż jeden taki element
selektor CSSBy.cssSelector("input[type=hidden]")Daje dużą plastyczność i spore możliwości Należy napisać stabilny selektor, a nie zawsze jest to łatwe
XPATH/html/body/aDaje dużą plastyczność i spore możliwości Należy napisać stabilny selektor, a nie zawsze jest to łatwe
Lokalizator złożonyByIdOrName(String idOrName)Wygodne, kiedy chcemy połączyć lokatoryRzadki w użyciu
Lokalizator względnybelow()Stosunkowo łatwe w użyciuZależne od innych elementów

Których lokatorów powinniśmy używać?

Odpowiedź niestety brzmi – to zależy.

  • jeśli to możliwe, staramy się używać ID, name lub klasy CSS – jeśli oczywiście nie są auto-generowane, unikalne i stabilne. Niestety, najczęściej takie atrybuty nie są dostępne
  • gdy potrzebujemy selektora „ostatniej szansy”, możemy użyć XPATH lub CSS, ale musimy zadbać o ich stabilność
  • w przypadku odnośników, w grę wchodzi korzystanie z ich tekstów
  • z nazw znaczników korzystam przeważnie tylko w przypadku budowania list lokatorów (np. kiedy potrzebuję pobrać wszystkie komórki tabeli). Rzadko stosuję je w testach, ponieważ przeważnie na stronach znaczniki pojawiają się więcej niż raz

CSS vs XPATH

Kilka różnić między tymi dwoma selektorami:

  • Selektory CSS są szybsze
  • XPATH pozwala na wyszukiwanie na podstawie widocznego tekstu (np. //div[text()='sample-text'])
  • XPATH umożliwia lokalizowanie elementów w obu kierunkach (od rodzica do dziecka i odwrotnie), CSS pozwala jedynie na lokalizowanie od rodzica do dziecka

Podobał Ci się ten artykuł?

Jeśli chciałbyś przeczytać takich więcej, zachęcamy do polubienia naszych profili w mediach społecznościowych. Zero spamu, sam konkret!

Dodaj komentarz