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.
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.
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.
Halko! A próbowałaś to po prostu sprawdzić zan [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.
Dzięki za odpowiedź ; )
Zadziałało ( driver.FindElement(By.LinkText("Przejdź do kasy")); ) mimo białych znaków 🙂 Niepotrzebnie kombinowałam 😀