Selenium w C# 14. Mechanizmy lokalizujące: szukanie po linku

W tej lekcji kontynuujemy temat prostych lokatorów. Pokażę Ci szukanie po linku, a konkretnie po jego tekście lub fragmencie tekstu.

 

Szukanie po linku: linki i materiały

W Selenium mamy możliwość wyszukiwać po linku, a właściwie po jego tekście. Służą do tego dwie metody: LinkText oraz PartialLinkText. Obie metody, jak sama ich nazwa już wskazuje, dotyczą linków, czyli elementów o tagu <a>.

Asercje potwierdzające, że metoda rzuca wyjątek (lub nie)

Szukanie po linku użyte w metodzie FindBy, powinno nam zwrócić element (tak samo jak i w przypadku dotychczas już poznanych lokatorów). Jeżeli element nie zostanie znaleziony, otrzymamy wyjątek. Co w sytuacji, gdy będziemy chcieli sprawdzić w asercji, czy element został znaleziony?

W NUnicie możliwe jest użycie asercji, która odniesie się do faktu rzucenia jakiegoś wyjątku (lub właśnie nie). Są to asercje DoesNotThrow(delegata) oraz Throws<TActual>(delegata). Pierwsza z nich sprawi, że test przejdzie z sukcesem, jeżeli wyjątek nie poleci w trakcie wykonywania metody, na którą wskazuje podana w parametrze delegata. Druga natomiast sprawi, że test przejdzie z sukcesem jeżeli metoda rzuci wyjątkiem ale takiego typu, jaki podamy (TActual).

Delegaty

Delegata, której będzie używać w powyższych asercjach, jest wskaźnikiem do określonej (podanej przez nas) metody, czyli przechowuje referencję do niej. Delegata i metoda, na którą ma wskazywać delegata, muszą mieć taką sama sygnaturę, czyli musi się zgadzać typ zwracany i parametry. Delegata pozwala nam na użycie jakiejś metody jako parametru do innej metody i tego właśnie potrzebujemy, żeby móc użyć asercji DosNotThrow albo Throws.

Na filmie pokazuję jak stworzyć delegatę i potem jak jej użyć w asercji.

Wyrażenia lambda

Wyrażenia lambda to sposób na zdefiniowanie funkcji anonimowej, czyli takiej, która nie ma nazwy. Może ona zostać użyta jako zmienna albo przekazana jako parametr w metodzie. Wyrażenie lambda to inny sposób na zapisanie delegaty. Jest też dużo krótszy i wygodniejszy. To właśnie z wyrażeń lambda będziemy korzystać, gdy będziemy chcieli przekazać jakąś metodę jako parametr np. w asercji. Jak używać wyrażeń lambda zobaczysz w filmie.

Szukanie po linku: klasa testowa

Poniżej znajdziesz kod, który pojawił się w lekcji.

Ukryta treść

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

Dokumentacja Selenium i materiały

Metody wyjaśnione w dzisiejszej lekcji znajdują się w klasie By. Jeżeli nie znasz pozostałych lokatorów, których używam w tej lekcji, zajrzyj do poprzedniej lekcji.

Wsparcie merytoryczne

Nie masz aktywnego członkostwa. Wykup dostęp albo Zaloguj się, by móc zadawać pytania.

  1. Cześć!
    Przerabiam własnie tę lekcję i mam wrażenie, że coś jest nie tak -> przycisk "Przejdź do kasy" ma tekst linku z białymi znakami CRLF:
    "
    Przejdź do kasy"
    Z czymś takim chyba nie można skorzystać z FindElement By.LinkText : ) ?
    Jeśli można, to chętnie dowiem się jak. Próbowałam z opcją @"\r\n Przejdź do kasy" ale ten potworek nie działa. Docelowo skorzystałam z (By.PartialLinkText("Przejdź do kasy")) i to działa bez zarzutu.

    Odpowiedz