xpath axes dynamic xpath selenium webdriver
W tym samouczku wyjaśniono osie XPath dla dynamicznego XPath w Selenium WebDriver z pomocą różnych osi XPath użytych, przykłady i wyjaśnienie struktury:
W poprzednim samouczku poznaliśmy funkcje XPath i ich znaczenie w identyfikowaniu elementu. Jednakże, gdy więcej niż jeden element ma zbyt podobną orientację i nazewnictwo, unikalna identyfikacja elementu staje się niemożliwa.
=> Zapoznaj się z idealnym przewodnikiem po treningu selenu tutaj.
Czego się nauczysz:
Zrozumienie osi XPath
Zrozummy powyższy scenariusz na przykładzie.
Pomyśl o scenariuszu, w którym używane są dwa łącza z tekstem „Edytuj”. W takich przypadkach istotne staje się zrozumienie węzłowej struktury HTML.
Proszę skopiować i wkleić poniższy kod do notatnika i zapisać go jako plik .htm.
Edit Edit
Interfejs użytkownika będzie wyglądał jak na poniższym ekranie:
Stwierdzenie problemu
P # 1) Co zrobić, gdy nawet funkcje XPath nie identyfikują elementu?
Odpowiedź: W takim przypadku używamy osi XPath wraz z funkcjami XPath.
Druga część tego artykułu dotyczy tego, jak możemy użyć hierarchicznego formatu HTML do identyfikacji elementu. Zaczniemy od zdobycia kilku informacji na temat osi XPath.
P # 2) Co to są osie XPath?
Odpowiedź: Osie XPath definiują zestaw węzłów względem bieżącego (kontekstowego) węzła. Służy do lokalizowania węzła, który jest względem węzła w tym drzewie.
Pytanie 3) Co to jest węzeł kontekstowy?
Odpowiedź: Węzeł kontekstu można zdefiniować jako węzeł, na który aktualnie patrzy procesor XPath.
Różne osie XPath używane w testach selenu
Istnieje trzynaście różnych osi, które są wymienione poniżej. Jednak nie będziemy używać ich wszystkich podczas testów Selenium.
- przodek : Te osie wskazują wszystkich przodków względem węzła kontekstu, również sięgając do węzła głównego.
- przodek lub ja: Ten wskazuje węzeł kontekstu i wszystkich przodków względem węzła kontekstu i obejmuje węzeł główny.
- atrybut: Wskazuje atrybuty węzła kontekstu. Można go przedstawić za pomocą symbolu „@”.
- dziecko: To wskazuje na dzieci węzła kontekstu.
- zniżkowy: Wskazuje to na dzieci, wnuki i ich dzieci (jeśli istnieją) węzła kontekstu. NIE oznacza to atrybutu i przestrzeni nazw.
- potomek lub ja: Wskazuje na węzeł kontekstu i dzieci oraz wnuki i ich dzieci (jeśli istnieją) węzła kontekstu. NIE oznacza to atrybutu ani przestrzeni nazw.
- następujący: To wskazuje wszystkie węzły, które się pojawiają po węzeł kontekstu w strukturze HTML DOM. NIE oznacza to potomków, atrybutów ani przestrzeni nazw.
- następujące rodzeństwo: Ten wskazuje wszystkie węzły siostrzane (ten sam rodzic co węzeł kontekstu) zjawić się za węzłem kontekstu w strukturze HTML DOM. NIE oznacza to potomków, atrybutów ani przestrzeni nazw.
- przestrzeń nazw: Wskazuje to na wszystkie węzły przestrzeni nazw węzła kontekstu.
- rodzic: Wskazuje to na rodzica węzła kontekstu.
- poprzedzający: To wskazuje wszystkie węzły, które się pojawiają przed węzeł kontekstu w strukturze HTML DOM. NIE oznacza to potomków, atrybutów ani przestrzeni nazw.
- poprzednie rodzeństwo: Ten wskazuje wszystkie węzły rodzeństwa (ten sam rodzic co węzeł kontekstu), które się pojawiają przed węzeł kontekstu w strukturze HTML DOM. NIE oznacza to potomków, atrybutów ani przestrzeni nazw.
- samego siebie: Ten wskazuje węzeł kontekstu.
Struktura osi XPath
Rozważ poniższą hierarchię, aby zrozumieć, jak działa osie XPath.
jak otwierać pliki jar w systemie Windows 10 Java
Zobacz poniżej prosty kod HTML dla powyższego przykładu. Proszę skopiować i wkleić poniższy kod w edytorze notatnika i zapisać go jako plik .html.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
Strona będzie wyglądać jak poniżej. Naszą misją jest wykorzystanie osi XPath do unikalnego wyszukiwania elementów. Spróbujmy zidentyfikować elementy, które są zaznaczone na powyższym wykresie. Węzeł kontekstu to 'Ssak'
1) Przodek
Dziennik: Aby zidentyfikować element nadrzędny z węzła kontekstu.
XPath # 1: // div [@ class = 'Ssak'] / ancestor :: div
XPath „// div [@ class =’ Mammal ”] / ancestor :: div” generuje dwa pasujące węzły:
- Kręgowiec, gdyż jest rodzicem „Ssaka”, stąd też uważany jest za przodka.
- Zwierzę, ponieważ jest rodzicem rodzica „Ssaka”, stąd uważane jest za przodka.
Teraz musimy tylko zidentyfikować jeden element, który jest klasą „Animal”. Możemy użyć XPath, jak wspomniano poniżej.
XPath#2: //div[@class='Mammal']/ancestor::div[@class='Animal']
Jeśli chcesz dotrzeć do tekstu „Animal”, poniżej XPath można użyć.
# 2) Przodek lub ja
Dziennik: Aby zidentyfikować węzeł kontekstu i element nadrzędny z węzła kontekstu.
XPath # 1: // div [@ class = 'Mammal'] / ancestor-or-self :: div
Powyższy XPath # 1 rzuca trzy pasujące węzły:
- Zwierzę (przodek)
- Kręgowiec
- Ssak (ja)
# 3) Dziecko
Dziennik: Aby zidentyfikować dziecko węzła kontekstu „Mammal”.
XPath # 1: // div [@ class = 'Ssak'] / child :: div
XPath # 1 pomaga zidentyfikować wszystkie dzieci węzła kontekstu „Mammal”. Jeśli chcesz uzyskać określony element podrzędny, użyj XPath # 2.
XPath # 2: // div [@ class = 'Ssak'] / child :: div [@ class = 'Roślinożerne'] / h5
# 4) Potomek
Dziennik: Aby zidentyfikować dzieci i wnuki węzła kontekstu (na przykład: „Zwierzę”).
XPath # 1: // div [@ class = 'Animal'] / descendant :: div
Ponieważ Animal jest najwyższym członkiem w hierarchii, wszystkie elementy podrzędne i podrzędne są podświetlane. Możemy również zmienić węzeł kontekstu dla naszego odniesienia i użyć dowolnego elementu jako węzła.
# 5) Descendant-or-self
Dziennik: Aby znaleźć sam element i jego potomków.
XPath1: // div [@ class = 'Animal'] / descendant-or-self :: div
Jedyną różnicą między potomkiem a potomkiem lub jaźnią jest to, że oprócz podkreślania potomków, podkreśla siebie.
# 6) Śledzenie
Dziennik: Aby znaleźć wszystkie węzły następujące po węźle kontekstu. W tym przypadku węzeł kontekstu to element div zawierający element Mammal.
XPath: // div [@ class = 'Ssak'] / following :: div
Na kolejnych osiach podświetlane są wszystkie węzły występujące po węźle kontekstu, czy to dziecko, czy potomek.
# 7) Podążanie za rodzeństwem
Dziennik: Aby znaleźć wszystkie węzły po węźle kontekstu, które mają tego samego rodzica i są równorzędne z węzłem kontekstu.
XPath: // div [@ class = 'Mammal'] / following-sibling :: div
kod wywiadu java pytania i odpowiedzi
Główną różnicą między następującym rodzeństwem a następnym rodzeństwem jest to, że następny rodzeństwo bierze wszystkie węzły rodzeństwa po kontekście, ale będzie również dzielić tego samego rodzica.
# 8) Uprzedzanie
Dziennik: Zajmuje wszystkie węzły, które znajdują się przed węzłem kontekstu. Może to być węzeł nadrzędny lub dziadek.
Tutaj węzłem kontekstu jest Bezkręgowiec, a podświetlone linie na powyższym obrazku to wszystkie węzły, które znajdują się przed węzłem Bezkręgowców.
# 9) Poprzednie rodzeństwo
Dziennik: Aby znaleźć rodzeństwo, które ma tego samego rodzica co węzeł kontekstu i znajduje się przed węzłem kontekstu.
Ponieważ węzłem kontekstu jest Bezkręgowiec, jedynym wyróżnionym elementem jest Kręgowiec, ponieważ ta dwójka jest rodzeństwem i ma tego samego rodzica „Zwierzę”.
# 10) Rodzic
Dziennik: Aby znaleźć element nadrzędny węzła kontekstu. Jeśli sam węzeł kontekstu jest przodkiem, nie będzie miał węzła nadrzędnego i nie pobierze żadnych pasujących węzłów.
Węzeł kontekstowy nr 1: Ssak
XPath: // div [@ class = 'Mammal'] / parent :: div
Ponieważ węzłem kontekstu jest ssak, element z kręgowcem jest podświetlany, ponieważ jest to element nadrzędny ssaka.
Węzeł kontekstowy nr 2: Zwierzę
XPath: // div [@ class = 'Animal'] / parent :: div
Ponieważ sam węzeł zwierzęcy jest przodkiem, nie podświetli żadnych węzłów i dlatego nie znaleziono żadnych pasujących węzłów.
# 11) Ja
Dziennik: Aby znaleźć węzeł kontekstu, używa się self.
Węzeł kontekstowy: Ssak
XPath: // div [@ class = 'Ssak'] / self :: div
Jak widać powyżej, obiekt Mammal został zidentyfikowany w wyjątkowy sposób. Możemy również zaznaczyć tekst „Mammal”, korzystając z poniższej ścieżki XPath.
XPath: // div [@ class = „Ssak”] / self :: div / h4
Zastosowania poprzedzających i następujących osi
Załóżmy, że wiesz, że Twoim elementem docelowym jest liczba tagów przed lub z tyłu z węzła kontekstu, możesz bezpośrednio zaznaczyć ten element, a nie wszystkie elementy.
Przykład: poprzedzający (z indeksem)
Załóżmy, że nasz węzeł kontekstu to „Inny” i chcemy dotrzeć do elementu „Mammal”, skorzystalibyśmy z poniższego podejścia, aby to zrobić.
Pierwszy krok: Po prostu użyj poprzedzania bez podawania wartości indeksu.
XPath: // div [@ class = 'Inne'] / poprzedzające :: div
szablon podpisania testu akceptacji użytkownika
Daje nam to 6 pasujących węzłów, a chcemy mieć tylko jeden docelowy węzeł „Mammal”.
Drugi krok: Podaj wartość indeksu [5] elementowi div (licząc w górę od węzła kontekstu).
XPath: // div [@ class = ’Other’] / previous :: div [5]
W ten sposób pomyślnie zidentyfikowano element „Mammal”.
Przykład: śledzenie (z indeksem)
Załóżmy, że nasz węzeł kontekstu to „Ssak” i chcemy dotrzeć do elementu „Skorupiak”. Aby to zrobić, zastosujemy poniższe podejście.
Pierwszy krok: Po prostu użyj poniższego bez podawania wartości indeksu.
XPath: // div [@ class = 'Ssak'] / following :: div
Daje nam to 4 pasujące węzły, a chcemy tylko jednego docelowego węzła „Skorupiaki”
Drugi krok: Podaj wartość indeksu [4] elementowi div (licząc od węzła kontekstu).
XPath: // div [@ class = ’Other’] / following :: div [4]
W ten sposób pomyślnie zidentyfikowano element „skorupiak”.
Powyższy scenariusz można również odtworzyć za pomocą poprzedzające rodzeństwo i następujące rodzeństwo stosując powyższe podejście.
Wniosek
Identyfikacja obiektów jest najważniejszym krokiem w automatyzacji każdej witryny internetowej. Jeśli możesz zdobyć umiejętność dokładnego uczenia się obiektu, 50% automatyzacji jest zrobione. Chociaż istnieją lokalizatory umożliwiające identyfikację elementu, istnieją przypadki, w których nawet lokalizatory nie mogą zidentyfikować obiektu. W takich przypadkach musimy zastosować różne podejścia.
Tutaj użyliśmy funkcji XPath i osi XPath, aby jednoznacznie zidentyfikować element.
Kończymy ten artykuł, zapisując kilka punktów do zapamiętania:
- Nie należy stosować osi „nadrzędnych” na węźle kontekstu, w którym sam węzeł kontekstu jest nadrzędny.
- Nie należy stosować osi „nadrzędnych” w węźle kontekstu, w którym sam węzeł kontekstu jest przodkiem.
- Nie należy stosować osi „potomnych” w węźle kontekstu, w którym sam węzeł kontekstu jest podrzędny.
- Nie należy stosować osi „podrzędnych” w węźle kontekstu, w którym sam węzeł kontekstu jest przodkiem.
- Nie należy stosować osi „następujących” w węźle kontekstowym, jest to ostatni węzeł w strukturze dokumentu HTML.
- Nie należy stosować „poprzedzających” osi w węźle kontekstu, jest to pierwszy węzeł w strukturze dokumentu HTML.
Miłej nauki !!!
=> Odwiedź tutaj, aby zapoznać się z ekskluzywną serią samouczków szkoleniowych dotyczących selenu.
rekomendowane lektury
- Funkcje XPath dla dynamicznego XPath w Selenium
- Cucumber Selenium Tutorial: Integracja Cucumber Java Selenium WebDriver
- Lokalizatory selenu: identyfikacja elementów sieci Web za pomocą XPath w selenie (przykłady)
- Wprowadzenie do Selenium WebDriver - samouczek Selenium # 8
- Samouczek Selenium ChromeDriver: Testy Selenium Webdriver w przeglądarce Chrome
- Wdrożenie naszego pierwszego skryptu WebDriver - Selenium WebDriver Tutorial # 10
- 30+ najlepszych samouczków dotyczących selenu: naucz się selenu z prawdziwymi przykładami
- Obsługa tabel internetowych, ramek i elementów dynamicznych w skrypcie Selenium - samouczek Selenium nr 18