Dzisiaj poruszymy dwa tematy. Pierwszy z nich to posługiwanie się tylko fragmentem wartości atrybutu do wyszukania elementu. Drugi z nich to powód, dla którego chyba najczęściej sięgamy do XPatha nawet, jeżeli na co dzień go nie używamy, czyli szukanie po tekście elementu.
Konsola deweloperska i znaczniki
Jeżeli nie znasz konsoli deweloperskiej i nie wiesz czym są znaczniki HTML, zacznij od tej lekcji: Znaczniki i konsola deweloperska. Jeżeli jesteś tutaj z kursu Selenium w C#, to najpewniej masz ją już za sobą 😉
Przewodnik po selektorach CSS i XPath
Przy lekcjach dotyczących selektorów CSS i XPatha, a już szczególnie przy zadaniach, pomocny się może okazać przewodnik po selektorach CSS i XPath.
>> Dostaniesz go tutaj
Fragment wartości atrybutu i szukanie po tekście: linki i materiały
W XPathie mamy możliwość wyszukiwania po fragmencie wartości atrybutów. Możemy się posłużyć jedną z dwóch funkcji: contains() albo starts-with(). Same nazwy już dużo mówią o tym, czemu te metody będą służyły. Pierwsza służy do podania warunku dotyczącego tego, że któryś z atrybutów elementu ma zawierać jakiś ciąg znaków, a druga mówi o tym, że wartość danego atrybutu ma się zaczynać jakimś ciągiem znaków.
W powyższym przykładzie pierwszy XPath znajdzie wszystkie elementy, których klasa zawiera product, a drugi XPath zaznaczy wszystkie elementy, których klasa zaczyna się od product. Klasa jest tylko przykładem, bo można użyć dowolnego atrybutu.
Szukanie po tekście i jego fragmencie
Szukanie po tekście to szukanie po tym, co się znajduje pomiędzy tagiem otwierającym i zamykającym. Przykładowo mamy np. poniższy przycisk:
Tekst, to to co znajduje się pomiędzy <button> a </button>. Nie należy tego mylić z tym co znajduje się w title – specjalnie tutaj dałam taki sam tekst, bo w praktyce często się tak zdarza. Po tytule umiecie już wyszukać, bo tytuł to nic innego jak atrybut. Natomiast to co znajduje się pomiędzy tagiem otwierającym i zamykającym będziemy rozumieli jako tekst.
Do wyszukiwania po tekście służy funkcja text(). Możemy ją również łączyć z funkcjami contains() oraz starts-with(). W takim przypadku postępujemy podobnie jak w przypadku atrybutów tylko zamiast atrybutu podajemy właśnie text().
W powyższych przykładach pierwszy XPath zaznaczy wszystkie elementy, których tekst jest dokładnie taki jak podany, czyli „Kliknij tutaj”. Drugi XPath zaznaczy wszystkie elementy, których tekst zawiera „tutaj”, a trzeci wszystkie elementy, których tekst zaczyna się od „Kliknij”.
Czy można to wszystko połączyć?
Można! To znaczy, że można użyć zarówno warunku dotyczącego tekstu (lub jego fragmentu) jak i warunku dotyczącego atrybutu (lub również jego fragmentu). Używamy do tego słówka and i kleimy razem to, co już znamy. Kilka przykładów zobaczysz poniżej.
.//h2[text()='Kupuj wg kategorii' and @class='section-title'] .//h2[text()='Kupuj wg kategorii' and contains(@class,'section-title')] .//h2[starts-with(text(),'Kupuj') and contains(@class,'section-title')]
Komentarze
Nie masz aktywnej subskrypcji. Wykup subskrypcję albo zaloguj się, by móc komentować.