XPath zawiera, podążanie za rodzeństwem, przodkiem & Selen I / LUB

Jeśli prosty XPath nie jest w stanie znaleźć skomplikowanego elementu WWW dla naszego skryptu testowego, musimy skorzystać z funkcji z biblioteki XPath 1.0. Dzięki połączeniu tych funkcji możemy stworzyć bardziej szczegółową ścieżkę XPath. Omówmy 3 takie funkcje -

  1. Zawiera
  2. Rodzeństwo
  3. Przodek
  4. I OR
  5. Rodzic
  6. Zaczynać z
  7. Osie XPath

Przeanalizujmy je szczegółowo -

Co zawiera () w selenie?

zawiera () w Selenium to funkcja w wyrażeniu Xpath, która służy do wyszukiwania elementów sieci Web zawierających określony tekst. Możemy wyodrębnić wszystkie elementy, które pasują do podanej wartości tekstowej, za pomocą funkcji XPath zawiera () na całej stronie internetowej. Zawiera w XPath ma możliwość znalezienia elementu z częściowym tekstem.

Dawny. Tutaj szukamy kotwicy. Zawiera tekst jako „SAP M”.

"// h4 / a [zawiera (text (), 'SAP M')]"

UWAGA: Możesz przećwiczyć następujące ćwiczenie XPath na http://demo.guru99.com/test/selenium-xpath.html

Co to jest rodzeństwo w Selenium Webdriver?

Rodzeństwa w selen Webdriver to funkcja służąca do pobierania elementu materiału, czyli rodzeństwo do elementu nadrzędnego. Jeśli element nadrzędny jest znany, można łatwo znaleźć lub zlokalizować element sieciowy, który może używać atrybutu rodzeństwa wyrażenia Xpath w selenium webdriver.

Rodzeństwo w XPath Przykład: Tutaj na podstawie elementu rodzeństwa „a” znajdujemy „h4”

"// div [@ class = 'canvas- graph'] // a [@href = '/ accounts.html'] [i [@ class = 'icon-usd']] / following-sibling :: h4"

Ancestor : Aby znaleźć element na podstawie elementu nadrzędnego, możemy użyć atrybutu przodka XPath.

Zrozummy te 3 funkcje na przykładzie -

Kroki testowe

Uwaga: od daty utworzenia samouczka strona główna Guru99 została zaktualizowana, więc zamiast tego użyj strony demonstracyjnej, aby przeprowadzić testy

  1. Idź do http://demo.guru99.com/test/guru99home/
  2. W sekcji „Kilka naszych najpopularniejszych kursów” wyszukaj wszystkie elementy sieci Web, które są rodzeństwem elementu WebElement, którego tekst to „SELENIUM”
  3. Znajdziemy element za pomocą funkcji zawierającej tekst XPath, przodka i rodzeństwa.

KORZYSTANIE Z zawiera i XPath Rodzeństwo

import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class SiblingAndParentInXpath {@Testpublic void testSiblingAndParentInXpath () {Sterownik WebDriver;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);driver = nowy FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get („http://demo.guru99.com/test/guru99home/”);// Przeszukaj element w 'Popularnym kursie', który jest rodzeństwem kontrolki 'SELENIUM', Tutaj najpierw znajdziemy h2, którego tekst to '' Kilka z naszych najpopularniejszych kursów ', następnie przechodzimy do jego elementu nadrzędnego, którym jest' div ', wewnątrz tego div znajdziemy link, którego tekstem jest' SELENIUM ', a następnie znajdziemy wszystkie elementy rodzeństwa tego linku (' SELENIUM ')List  dateBox = driver.findElements (By.xpath ("// h2 [zawiera (text (), 'Kilka naszych najpopularniejszych kursów')] / parent :: div // div [// a [tekst () = 'SELENIUM']] / following-sibling :: div [@ class = 'rt-grid-2 rt-omega'] "));// Wydrukuj wszystkie elementy, które są rodzeństwem elementu o nazwie „SELENIUM” w „Kursie popularnym”for (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.close ();}}

Wynik będzie następujący:

Przodek w Selenium Webdriver

Przodek w Selenium Webdriver to funkcja używana do znajdowania przodka określonego elementu w określonej warstwie. Poziom przodka, który ma zostać zwrócony lub poziom przodka w stosunku do poziomu członka, można wyraźnie określić. Zwraca liczbę kroków hierarchicznych od przodka, lokalizując określonego przodka, którego chce użytkownik.

Teraz przypuśćmy, że musimy przeszukać wszystkie elementy w sekcji „Kurs popularny” za pomocą przodka kotwicy, której tekstem jest „SELENIUM”

Tutaj nasze zapytanie xpath będzie wyglądać następująco

"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / following-sibling :: div"

Kompletny kod

import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.Keys;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class AncestorInXpath {@Testpublic void testAncestorInXpath () {Sterownik WebDriver = nowy FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get („http://demo.guru99.com/test/guru99home/”);// Wyszukaj wszystkie elementy w sekcji „Popularny kurs”// z pomocą przodka kotwicy, której tekst to „SELENIUM”List  dateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM' ']] / ancestor :: div [@ class =' ​​rt-grid-2 rt- omega '] / następujący-rodzeństwo :: div "));// Wydrukuj wszystkie elementy siostrzane elementu o nazwie „SELENIUM” w „Kursie popularnym”for (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}

Wynik będzie wyglądał następująco:

Korzystanie z AND i OR

Używając AND i OR możesz umieścić 2 warunki w naszym wyrażeniu XPath.

  • W przypadku ORAZ oba warunki powinny być spełnione, wtedy tylko on znajduje element.
  • W przypadku OR, którykolwiek z 2 warunków powinien być spełniony, wtedy tylko on znajduje element.

Tutaj nasza kwerenda XPath będzie wyglądać następująco

Xpath = // * [@ type = 'submit' OR @ name = 'btnReset']
Xpath = // input [@ type = 'submit' and @ name = 'btnLogin']

Kroki testowe:

  1. Idź do http://demo.guru99.com/v1/
  2. W sekcji użyje powyższej witryny demonstracyjnej do wyszukiwania elementu z różnymi funkcjami XPath.

Znajdziesz element wykorzystujący osie AND i OR, rodzic, zaczyna się od i XPath

AND OR Przykład

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;klasa publiczna AND_OR {public static void main (String [] args) {Sterownik WebDriver;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");sterownik = nowy ChromeDriver ();// Uruchom aplikacjędriver.get („https://www.guru99.com/”);// Przeszukaj element, używając OR w ścieżce xpathw = driver.findElement (By.xpath ("// * [@ type = 'submit' OR @ name = 'btnReset']"));// Wydrukuj tekst elementuSystem.out.println (w.getText ());// Przeszukaj element za pomocą AND w ścieżce xpathx = driver.findElement (By.xpath ("// input [@ type = 'submit' and @ name = 'btnLogin']"));// Wydrukuj tekst szukanego elementuSystem.out.println (x.getText ());// Zamknij przeglądarkędriver.quit ();}}

Co to jest rodzic w selenie?

Parent in Selenium to metoda używana do pobierania węzła macierzystego bieżącego węzła wybranego na stronie internetowej. Jest to bardzo przydatne w sytuacji, gdy wybierasz element i potrzebujesz pobrać element nadrzędny za pomocą Xpath. Ta metoda jest również używana do uzyskania rodzica rodzica.

Tutaj nasza kwerenda XPath będzie wyglądać następująco

Xpath = // * [@ id = 'rt-feature'] // parent :: div

XPath przy użyciu Parent

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Parent {public static void main (String [] args) {Sterownik WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");sterownik = nowy ChromeDriver ();// Uruchom aplikacjędriver.get („https://www.guru99.com/”);// Przeszukaj element za pomocą PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// Wydrukuj tekst szukanego elementuSystem.out.println (w.getText ());// Zamknij przeglądarkędriver.quit ();}}

Zaczynać z

Korzystając z funkcji Starts-with, możesz znaleźć element, którego atrybut zmienia się dynamicznie po odświeżeniu lub innych operacjach, takich jak kliknięcie, przesłanie itp.

Tutaj nasza kwerenda XPath będzie wyglądać następująco

Xpath = // etykieta [zaczyna się od (@ id, 'wiadomość')]

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class StartsWith {public static void main (String [] args) {Sterownik WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");sterownik = nowy ChromeDriver ();// Uruchom aplikacjędriver.get („https://www.guru99.com/”);// Przeszukaj element, używając znaków zaczynających się odw = driver.findElement (By.xpath ("// etykieta [zaczyna się od (@ id, 'wiadomość')]"));// Wydrukuj tekst szukanego elementuSystem.out.println (w.getText ());// Zamknij przeglądarkędriver.quit ();}}

Osie Xpath

Używając osi XPath, możesz znaleźć dynamiczne i bardzo złożone elementy na stronie internetowej. Osie XPath zawierają kilka metod wyszukiwania elementu. Tutaj omówię kilka metod.

następujące : Ta funkcja zwróci bezpośredni element określonego składnika.

Tutaj nasza kwerenda XPath będzie wyglądać następująco

Xpath = // * [@ type = 'text'] // następujący :: input

XPath przy użyciu następujących plików

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Obserwujesz {public static void main (String [] args) {Sterownik WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");sterownik = nowy ChromeDriver ();// Uruchom aplikacjędriver.get („https://www.guru99.com/”);// Wyszukaj element za pomocą metody podążającejw = driver.findElement (By.xpath ("// * [@ type = 'tekst'] // następujący :: wejście"));// Wydrukuj tekst szukanego elementuSystem.out.println (w.getText ());// Zamknij przeglądarkędriver.quit ();}}

Preceding: Ta funkcja zwróci poprzedni element określonego elementu.

Tutaj nasza kwerenda XPath będzie wyglądać następująco

Xpath = // * [@ type = 'submit'] // poprzedzające :: input

XPath przy użyciu Preceding

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Preceding {public static void main (String [] args) {Sterownik WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");sterownik = nowy ChromeDriver ();// Uruchom aplikacjędriver.get („https://www.guru99.com/”);// Wyszukaj element przy użyciu poprzedniej metodyw = driver.findElement (By.xpath ("// * [@ type = 'submit'] // previous :: input"));// Wydrukuj szukany elementSystem.out.println (w.getText ());// Zamknij przeglądarkędriver.quit ();}}

d) Descendant: Ta funkcja zwróci element podrzędny określonego elementu.

Tutaj nasza kwerenda XPath będzie wyglądać następująco

Xpath = // * [@ id = 'rt-feature'] // descendant :: a

XPath przy użyciu Descendant

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Descendant {public static void main (String [] args) {Sterownik WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");sterownik = nowy ChromeDriver ();// Uruchom aplikacjędriver.get („https://www.guru99.com/”);// Wyszukaj element za pomocą metody podrzędnejw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // descendant :: a"));// Wydrukuj szukany elementSystem.out.println (w.getText ());// Zamknij przeglądarkędriver.quit ();}}

Podsumowanie

  • Istnieją sytuacje, w których zwykły XPath nie może zostać użyty do znalezienia elementu. W takiej sytuacji potrzebujemy innych funkcji z zapytania xpath.
  • Istnieje kilka ważnych funkcji XPath, takich jak XPath zawiera, rodzica, przodków, podążanie za rodzeństwem itp.
  • Za pomocą tych funkcji można tworzyć złożone wyrażenia XPath.

Interesujące artykuły...