xpath functions dynamic xpath selenium
W tym samouczku wyjaśniono użycie funkcji XPath w identyfikowaniu elementów z przykładami:
Przed automatyzacją jakiejkolwiek strony internetowej konieczne jest prawidłowe zidentyfikowanie obiektu, zanim będziemy mogli wykonać na nim jakąkolwiek operację. Jak wiemy, najłatwiejszym sposobem identyfikacji elementu są atrybuty takie jak identyfikator, nazwa, łącze, klasa lub każdy inny unikalny atrybut dostępny ze znacznikiem, w którym znajduje się element.
Jest to możliwe tylko wtedy, gdy te atrybuty są obecne i / lub są unikalne, tak aby obiekt został poprawnie zidentyfikowany.
=> Spójrz na przewodnik dla początkujących o selenie tutaj.
Czego się nauczysz:
Przegląd funkcji XPath
Omówmy scenariusz, w którym atrybuty nie są łatwo dostępne.
Stwierdzenie problemu
Jak zidentyfikujemy element, jeśli lokalizatory takie jak ID, nazwa, klasa, link itp. Nie są dostępne w tagu elementu?
Można to jasno zrozumieć na podanym przykładzie:
Zaloguj się do Świergot
Jak widać na powyższym zrzucie ekranu, nagłówek „Zaloguj się do Twittera” nie ma żadnych atrybutów. To powiedziawszy, nie możemy użyć żadnego z lokalizatorów, takich jak ID, Klasa, Link lub Nazwa, aby zidentyfikować ten element.
co to jest dobra usługa poczty elektronicznej
Wtyczka Firepath narzędzia Firefox wygenerowała poniższą ścieżkę XPath:
// * [@ id = „page-container”] / div / div [1] / h1
Nie zalecamy używania powyższego XPath jako struktury strony lub identyfikatora, ponieważ może on zmieniać się dynamicznie. Jeśli skorzystamy z tej niestabilnej XPath, być może będziemy musieli częściej zmieniać XPath, co jest bardziej czasochłonne w utrzymaniu. Jest to jeden przypadek, w którym nie możemy użyć ogólnego wyrażenia XPath z lokalizatorami, takimi jak id, klasa, nazwa czy link.
Rozwiązanie
Identyfikacja elementu za pomocą funkcji XPath według tekstu
Ponieważ mamy dostępny u nas widoczny tekst „Zaloguj się do Twittera”, skorzystalibyśmy z poniższych Funkcje XPath aby jednoznacznie zidentyfikować element.
- zawiera () [według tekstu]
- zaczyna się od () [według tekstu]
- tekst()
Funkcje XPath, takie jak zawiera (), zaczyna się od () i tekst (), gdy są używane z tekstem „Zaloguj się do Twittera”, pomogłyby nam poprawnie zidentyfikować element i można na nim wykonać dalsze operacje.
# 1) Metoda zawiera ():
Składnia: Aby znaleźć element sieciowy „Zaloguj się do Twittera”, użyj dowolnego z następujących wyrażeń XPath, które zawierają metodę include ().
Tekstem
- // h1 [zawiera (text (), „Zaloguj się do”)]
- // h1 [zawiera (text (), „na Twitterze”)]
Uwaga: 1 pasujący węzeł oznacza, że element sieciowy został pomyślnie zidentyfikowany.
Z powyższego przykładu jasno wynika, że metoda zawiera () nie potrzebuje bezwzględnego (pełnego) tekstu, aby poprawnie zidentyfikować element. Częściowy tekst wystarczy, aby poprawnie go zidentyfikować. Jednak zaznaczony fragment tekstu powinien być niepowtarzalny. Użytkownik może łatwo zidentyfikować element, nawet jeśli orientacja strony zostanie zmieniona za pomocą metody zawiera ().
Zwróć uwagę, że nawet jeśli użyjesz bezwzględnego tekstu „Zaloguj się do Twittera” z metodą zawiera (), element zostanie poprawnie zidentyfikowany.
# 2) Metoda Starts-with ():
Składnia: Aby znaleźć element sieciowy „Zaloguj się do Twittera”, użyj następujących przykładowych wyrażeń XPath, które mają metodę start-with ().
Tekstem
- // h1 [zaczyna się od (text (), „Zaloguj się”)]
- // h1 [zaczyna się od (text (), „Zaloguj się do”)]
Z powyższego przykładu jasno wynika, że funkcja XPath metoda zaczyna się od () wymaga co najmniej pierwszego słowa („Log”) widocznego tekstu, aby jednoznacznie zidentyfikować element. Działa również w przypadku częściowego tekstu i nie powiedzie się, jeśli nie uwzględnimy pierwszego słowa częściowo widocznego tekstu.
Zwróć uwagę, że nawet jeśli użyjesz bezwzględnego tekstu „Zaloguj się do Twittera” z metodą started-with (), element zostanie poprawnie zidentyfikowany.
Nieprawidłowy XPath dla zaczyna się od (): // h1 [zaczyna się od (tekst (), „na Twitterze”)]
Uwaga: Brak pasujących węzłów oznacza, że element sieciowy nie został zidentyfikowany.
# 3) Metoda Text ():
Składnia: Aby znaleźć element sieciowy „Zaloguj się do Twittera”, użyj następującego wyrażenia XPath z metodą text ().
W tym wyrażeniu używamy absolutnego tekstu znajdującego się między znacznikiem początkowym. Jeśli użyjemy funkcji text () z częściową ścieżką Xpath, tak jak w przypadku zawiera () i zaczyna się od (), nie bylibyśmy w stanie znaleźć elementu.
Nieprawidłowa ścieżka XP dla tekstu ():
Identyfikacja elementu za pomocą funkcji XPath według atrybutu
Używamy funkcji XPath (zawiera lub zaczyna się od) z atrybutem, gdy istnieją jednoznacznie zidentyfikowane wartości atrybutów dostępne w tagu kontenera. Dostęp do atrybutów uzyskuje się za pomocą symbolu „@”.
Można to jasno zrozumieć z podanym przykład:
Zaloguj się do Google
# 1) Metoda zawiera ():
Składnia: Aby jednoznacznie zidentyfikować przycisk „Szczęśliwy traf” za pomocą funkcji XPath zawiera () za pomocą atrybutu.
(i) Według atrybutu wartości:
- // dane wejściowe [zawiera (@ wartość, „Uczucie”)]
- // input [zawiera (@ value, „Lucky”)]
Z powyższych ilustracji wynika, że użycie wartości atrybutu z metodą „Feeling” lub „Lucky” z metodą zawiera () jednoznacznie identyfikuje element. Należy jednak pamiętać, że nawet jeśli wykorzystamy pełną zawartość atrybutu Value, to poprawnie zidentyfikuje element.
(ii) Według atrybutu nazwy:
//input[contains(@name=’btnI’)]
Niepoprawna wielkość liter dla funkcji XPath z atrybutem:
Musimy być bardzo ostrożni przy wyborze atrybutu, który ma być użyty z metodą zawiera () i zaczyna się od (). Jeśli wartość atrybutu nie jest unikalna, nie będziemy w stanie jednoznacznie zidentyfikować elementu.
Załóżmy, że jeśli weźmiemy atrybut „typ” podczas identyfikacji przycisku „Szczęśliwy traf”, XPath nie zadziała.
2 pasujące węzły wskazują, że element nie został poprawnie zidentyfikowany. Tutaj wartość atrybutu typu nie jest unikalna.
# 2) Metoda Starts-with ():
Metoda STARTS-with () z atrybutem jest bardzo przydatna, gdy musimy znaleźć elementy, których poprzednia część atrybutu pozostaje stała, podczas gdy druga część ciągle się zmienia. Takie podejście jest bardzo przydatne, gdy obiekty dynamicznie zmieniają wartość swoich atrybutów. Można to również wykorzystać, jeśli chcemy uchwycić podobne rodzaje elementów.
Iść do Nazwa użytkownika Facebook
Sprawdź pierwsze pole tekstowe „Imię” i drugie pole tekstowe „Nazwisko” formularza rejestracji.
Identyfikowane jest pierwsze pole tekstowe „Imię”.
Identyfikowane jest drugie pole tekstowe „Nazwisko”.
W obu polach tekstowych, które są zidentyfikowane dla opcji Zarejestruj się na Facebooku, początkowa część atrybutów identyfikatora pozostaje niezmieniona.
Imię id = „u_0_2”
Nazwisko id = „u_0_4”
To jest scenariusz, w którym możemy użyć atrybutu started-with (), aby pobrać wszystkie elementy z tego typu atrybutu id. Pamiętaj, że bierzemy tylko te dwa pola w celach informacyjnych. Jednak na ekranie może być więcej pól z identyfikatorami zaczynającymi się od „u_0_”.
Rozpoczyna się od () [według identyfikatora atrybutu]
//input[starts-with(@id,”u_0_”)]
Ważna uwaga: Tutaj użyliśmy podwójnych cudzysłowów zamiast pojedynczych cudzysłowów. Ale pojedyncze cudzysłowy będą działać również w przypadku metody zaczyna się od.
11 pasujących węzłów wskazuje, że ten XPath zidentyfikował wszystkie elementy, których identyfikatory zaczynają się od „u_0_”. Druga część identyfikatora (2 dla imienia, 4 dla nazwiska itd.) Określa, w jaki sposób jednoznacznie identyfikujemy element.
Możemy użyć atrybutu funkcji zaczyna się od, gdy musimy zebrać podobny typ elementów na liście i dynamicznie wybrać jeden z nich, omijając argument w metodzie ogólnej, aby jednoznacznie zidentyfikować element.
Postępuj zgodnie z poniższym przykładem, aby skorzystać z funkcji Start-with na naszą korzyść.
Przykładowy kod:
/* Generic Method */ public void xpathLoc(String identifier){ //The below step identifies the element “First Name” uniquely when the argument is “2” WebElement E1=d1.findElement(By.xpath('//input[starts-with(@id,”u_0_”+identifier )]')); E1.sendKeys(“Test1”); /* This step enters the value of First Name as “Test 1” */ } /* Main Method */ public static void main(String[] args) { xpathLoc(“2”); --- This step calls the xpathLoc() method to identify the first name. }
Uwaga: Eclipse może nie zezwalać na używanie cudzysłowów. Aby utworzyć dynamiczną ścieżkę XPath, może być konieczne użycie innego kodu.
Przykładowy kod jest podany w celach informacyjnych. Możesz go ulepszyć, aby pasował do wszystkich elementów i operacji, które chcesz wykonać, oraz wartości, które chcesz wprowadzić (w przypadku pól tekstowych), aby kod był bardziej wszechstronny.
Wniosek
W tym artykule wyjaśniono, w jaki sposób możemy wykorzystać funkcje XPath, zawierające (), zaczyna się od () i tekst () z atrybutem i tekstem, aby jednoznacznie identyfikować elementy w strukturze HTML DOM.
Poniżej znajduje się kilka spostrzeżeń, które możemy wyciągnąć dla funkcji XPath:
- Skorzystaj z metody „zawiera ()” w XPath, jeśli znasz częściowy stały widoczny tekst lub atrybut.
- Skorzystaj z metody „zaczyna się od ()” w XPath, jeśli znasz początkową, częściową stałą, widoczny tekst lub atrybut.
- Możesz także użyć metody zawiera () i zaczyna się od () z bezwzględnym tekstem lub atrybutem.
- Skorzystaj z metody „text ()” w XPath, jeśli znasz absolutnie widoczny tekst.
- Nie możesz użyć metody text () z częściowym tekstem.
- Nie można użyć metody started-with (), jeśli tekst początkowy nie jest używany w XPath lub jeśli tekst początkowy stale się zmienia.
W następnym samouczku nauczymy się, jak korzystać z osi XPath z funkcjami XPath, aby jeszcze bardziej ulepszyć lokalizację elementów na dostępnej stronie internetowej.
=> Przeczytaj serię szkoleń Easy Selenium.
rekomendowane lektury
- Lokalizatory selenu: identyfikacja elementów sieci Web za pomocą XPath w selenie (przykłady)
- Obsługa tabel internetowych, ramek i elementów dynamicznych w skrypcie Selenium - samouczek Selenium nr 18
- Funkcje łańcuchowe w Pythonie
- Postprocesor Xpath Extractor w JMeter
- Selenium Find Element By Text Samouczek z przykładami
- Cucumber Selenium Tutorial: Integracja Cucumber Java Selenium WebDriver
- Kompleksowy samouczek XPath - język ścieżki XML
- Wprowadzenie do Selenium WebDriver - samouczek Selenium # 8