Inżynierowie testowi są niezbędni w cyklu życia oprogramowania, ponieważ zapewniają, że zespół dostarcza wolne od błędów i działające aplikacje. Inżynierowie ci przeprowadzają różne testy aplikacji, zanim zostaną wysłane lub zadeklarowane jako gotowe dla użytkowników.
Testerzy powinni być wykwalifikowani i umieć lokalizować elementy sieciowe i wchodzić z nimi w interakcję. Selenium to jedno z najczęściej używanych narzędzi do automatyzacji testów przez nowoczesne zespoły programistyczne. To narzędzie ma cztery komponenty; Selenium Grid, Selenium WebDriver, Selenium IDE i Selenium RC.
Dzisiaj skupimy się na Selenium WebDriver, ponieważ zawiera on XPath. Ten artykuł zdefiniuje XPath, omówi podstawową składnię XPath i zilustruje sposób XPath w Selenium.
Spis treści:
Co to jest XPath
XPath (XML Path Language) to język zapytań do wybierania i nawigacji po atrybutach i elementach w dokumentach XML. XPath definiuje wyrażenie ścieżki, oferując sposób adresowania określonych części dokumentu XML i pobierania z niego informacji.
Jego składnia przypomina ścieżkę systemu plików. Zawiera również funkcje i symbole, które ułatwiają wybieranie elementów na podstawie ich atrybutów i hierarchii. Możesz używać XPath z technologiami takimi jak XML, HTML i XSLT do wyodrębniania danych i manipulowania nimi.
Dlaczego warto używać XPath?
- Jest elastyczny: w przeciwieństwie do selektorów CSS, które mogą lokalizować elementy tylko za pomocą nazwy znacznika, identyfikatora lub klasy, XPath umożliwia lokalizowanie elementów za pomocą innych atrybutów.
- Wielokrotnego użytku: możesz przechowywać XPath w zmiennych i ponownie używać ich w swoim kodzie.
- Precyzyjny wybór węzłów: XPath zapewnia ustandaryzowany sposób kierowania na określone elementy w dokumencie internetowym.
Podstawowa składnia XPath
XPath pozwala znaleźć dowolny element na stronie internetowej za pomocą DOM. Zanim jednak sprawdzimy składnię, musimy zrozumieć następujące wyrażenia XPath;
WyrażenieOpisnazwawęzła/nazwazmiennejWybiera wszystkie węzły o nazwie „nazwawęzła”/„nazwaznacznika”/Wybiera z węzła głównego//Wybiera węzły w bieżącym dokumencie z bieżącego węzła pasującego do zaznaczenia, niezależnie od tego, gdzie się znajdują@Wybiera atrybuty..Wybiera rodzica bieżący węzeł. Wybiera bieżący węzeł
Standardowa składnia XPath to;
XPath=//tagname[@attribute="value"]
Jak widać, składnia zaczyna się od podwójnego ukośnika (//), który zaczyna się od bieżącego węzła określonego przez nazwę znacznika/węzła.
Bezwzględna XPath a względna XPath
Mamy dwie ścieżki, gdy mamy do czynienia z XPath; Bezwzględna XPath i Względna XPath;
Absolutna XPath
Bezwzględna ścieżka XPath to bezpośrednia ścieżka od katalogu głównego do żądanego elementu. Zaczynasz od węzła głównego i kończysz na węźle docelowym.
Możesz mieć dokument HTML o następującej treści;
<!DOCTYPE html> <html> <head> <title>newsblog.pl</title> </head> <body> <div> <h1>Welcome to newsblog.pl</h1> </div> </body> </html>
Jeśli chcemy zlokalizować element z treścią „Witamy w newsblog.pl”, pójdziemy tą ścieżką;
/html/body/div/h1
W powyższym dokumencie mamy;
- HTML jako węzeł główny: /html
- Ciało jest węzłem nadrzędnym: /html/body
- Div jako dziecko węzła body: /html/body/div
- H1 jako dziecko węzła div: /html/body/div/h1
Aby zdobyć najgłębszy element, musisz podążać tą ścieżką.
Kiedy używać Absolute XPath
Bezwzględna XPath podąża „określoną” ścieżką. Będzie więc idealnie pasować, gdy na stronie znajduje się wiele elementów o podobnych atrybutach, zapewniając, że kierujesz dokładnie te elementy w dokumencie.
Jednak XPath jest zbyt wrażliwy na zmiany w strukturze dokumentu HTML. W związku z tym prosta zmiana może spowodować uszkodzenie Absolute XPath.
Względna ścieżka XPath
Względna ścieżka XPath zaczyna się od dowolnego węzła i kończy na węźle docelowym. Na tę ścieżkę nie mają wpływu zmiany w dokumencie, co czyni ją preferowaną w większości przypadków. Względna XPath umożliwia lokalizowanie elementów z dowolnej części dokumentu. Wyrażenie Względna XPath zaczyna się od podwójnych ukośników „//”.
Jeśli użyjemy dokumentu HTML, możemy zlokalizować nasz H1, który mówi „Witamy w newsblog.pl”;
<!DOCTYPE html> <html> <head> <title>newsblog.pl</title> </head> <body> <div> <h1>Welcome to newsblog.pl</h1> </div> </body> </html>
Nasza względna ścieżka XPath do h1 będzie;
//body/div/h1
Kiedy używać względnej XPath
Powinieneś używać Relative XPath, gdy szukasz równowagi między elastycznością a specyficznością. Ta ścieżka jest odporna na zmiany w dokumencie HTML, biorąc pod uwagę, że relacja między elementami pozostaje specyficzna.
Zlokalizuj elementy za pomocą XPath w Selenium
Selenium to platforma typu open source, która umożliwia użytkownikom automatyzację przeglądarek internetowych. Framework zawiera zbiór bibliotek i narzędzi, które pomagają testerom automatycznie i systematycznie wchodzić w interakcje z elementami sieci.
Zakładając, że mamy dokument internetowy, który zawiera następującą listę utworów;
<!DOCTYPE html> <html> <head> <title>Song Library</title> </head> <body> <h1>Song Library</h1> <ul class="song-list"> <li class="song" title="Song Title 1">Song 1 - Artist 1</li> <li class="song" title="Song Title 2">Song 2 - Artist 2</li> <li class="song" title="Song Title 3">Song 3 - Artist 1</li> <li class="song" title="Song Title 4">Song 4 - Artist 3</li> </ul> </body> </html>
- Naszym węzłem głównym jest .
- Mamy jako nasz węzeł nadrzędny.
- Mamy
jako dziecko .
- Mamy
- jako dziecko .
- Mamy
- jako dziecko
- .
W powyższym dokumencie HTML możemy użyć różnych lokalizatorów XPath. Na przykład możemy zlokalizować elementy według identyfikatora, nazwy, nazwy klasy, zawartości, tekstów, końcówek na i zaczynających się od, wśród wielu innych lokalizatorów. Możesz używać Selenium z różnymi językami programowania. Do demonstracji użyjemy Pythona.
Zlokalizuj według indeksu
Zakładając, że chcemy zlokalizować utwór numer 3, możemy mieć ten kod;
third_song = driver.find_element_by_xpath("//li[@class="song"][3]") print("Third Song:", third_song.text)
Użyliśmy względnej ścieżki XPath i zaczęliśmy od węzła „li”. Kiedy Selenium zlokalizuje trzecią piosenkę na naszej liście, wydrukuje jej tekst.
Zlokalizuj według atrybutu
Możemy mieć XPath, który szuka wszystkich piosenek z „Artist 1” i drukuje ich tytuły. Nasz kod może wyglądać następująco;
songs_by_artist1 = driver.find_elements_by_xpath("//li[contains(@class, 'song') and contains(text(), 'Artist 1')]") print("Songs by Artist 1:") for song in songs_by_artist1: print(song.text)
Zlokalizuj według tekstu
Ten lokalizator pomaga znaleźć elementy z określonym tekstem. Możemy wyszukać piosenkę z tekstem „Song 4” i wydrukować jej tekst. Możemy reprezentować ten lokalizator za pomocą tego kodu;
song_with_text = driver.find_element_by_xpath("//li[contains(text(), 'Song 4')]") print("Song with Text:", song_with_text.text)
Osie XPath
Podejścia, które omówiliśmy do tej pory, doskonale sprawdzają się w przypadku prostych stron internetowych. Istnieją jednak przypadki, w których metody wyszukiwania elementów XPath, takie jak tekst, identyfikator, nazwa klasy i nazwa, nie będą działać.
Osie XPath są używane w przypadku treści dynamicznych, w których zwykłe lokalizatory nie działają. Tutaj lokalizujesz elementy na podstawie ich relacji z innymi elementami. Oto niektóre z popularnych lokalizatorów osi XPath;
Przodek
Metoda Ancestor Axis jest idealna do obsługi dokumentów XML z silnie zagnieżdżonymi elementami. Możesz wybrać wszystkie elementy przodków, takie jak dziadkowie i rodzice bieżącego węzła, od najbliższego do najdalszego.
Możemy mieć następujący kod;
<bookstore> <book> <title>The Great Gatsby</title> <author>F. Scott Fitzgerald</author> <genre>Fiction</genre> </book> <book> <title>The Biggest Dilemma</title> <author>George Orwell</author> <genre>Dystopian</genre> </book> </bookstore>
Jeśli chcemy wybrać wszystkich przodków elementu „title” dla książki „The Biggest Dilemma”, możemy skorzystać z metody Ancestor Axis;
//title[text() = '1984']/ancestor::*
Następny
Metoda Follow Axis lokalizuje wszystkie węzły za znacznikiem zamykającym bieżącego węzła. Ta metoda nie uwzględnia hierarchii ani lokalizacji węzłów docelowych. Na przykład, jeśli masz dokument XML lub stronę internetową z wieloma sekcjami, możesz zidentyfikować element, który pojawia się po określonej sekcji bez poruszania się po całej strukturze drzewa.
Rodzic
Metoda Parent Axis w XPath wybiera rodzica bieżącego węzła. Możesz użyć następującej ścieżki, aby zlokalizować węzeł nadrzędny;
//tag[@attribute="value"]/parent::tagName
Takie podejście działa, gdy elementy podrzędne w bieżącym węźle mają unikalne atrybuty, które można łatwo zlokalizować i które chcesz sprawdzić u rodzica.
Dziecko
Metoda Child Axis w XPath wybiera wszystkie elementy podrzędne bieżącego węzła. Pozostaje jedną z najpopularniejszych metod osi XPath, ponieważ pomaga wybrać węzły potomne określonego elementu.
Rozważ ten fragment kodu;
<section id='text'> <p>Paragraph one</p> <p>Paragraph two</p> <p>Paragraph three</p> <p>Paragraph four</p> </section>
Za pomocą tej osi możemy zlokalizować wszystkie elementy „p” w naszym kodzie;
//section[@id='text']/child::p
Często zadawane pytania
Po co używać XPath zamiast selektorów CSS?
Selektory CSS mogą znajdować elementy tylko na podstawie ich identyfikatora, nazwy znacznika i klasy. Z drugiej strony możesz użyć XPath do zlokalizowania elementów na podstawie ich lokalizacji, treści tekstowej i innych atrybutów w strukturze HTML. Możesz także przechowywać wyrażenia XPath w zmiennych i ponownie wykorzystywać je w swojej aplikacji.
Jakie języki obsługuje XPath w Selenium?
Możesz używać XPath z dowolnym językiem obsługującym Selenium. Skrypty możesz pisać w językach JavaScript, Java, Python, Ruby, C# i PHP.
Jakie są alternatywy dla XPath?
Możesz użyć selektorów CSS, rozpoznawania obrazu lub wbudowanych lokalizatorów Selenium jako alternatywy dla XPath. Najpopularniejsze są selektory CSS; możesz znaleźć elementy na podstawie ich nazwy znacznika, identyfikatora lub klasy. Rozpoznawanie obrazu umożliwia lokalizowanie elementów na podstawie ich obrazów. Wbudowane lokalizatory Selenium zostały zaprojektowane tak, aby były łatwe w użyciu.
Wniosek
Możesz teraz definiować XPath w Selenium, rozróżniać XPath bezwzględny i względny oraz lokalizować elementy za pomocą różnych lokalizatorów XPath. Wybór lokalizatora będzie zależał od charakteru treści i celów końcowych.
Zapoznaj się z naszym artykułem na temat pytań do rozmowy kwalifikacyjnej Selenium, jeśli chcesz zaliczyć kolejną rozmowę kwalifikacyjną.