XPath zawiera: tekst, następujące elementy rodzeństwa i przodka w Selenium
Co zawiera XPath?
XPath zawiera to funkcja w wyrażeniu Xpath, która służy do wyszukiwania elementów internetowych zawierających określony tekst. Możemy wyodrębnić wszystkie elementy pasujące 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.
Przykład – zawiera tekst
Tutaj szukamy kotwicy zawierającej tekst „SAP M'.
"//h4/a[contains(text(),'SAP M')]"
UWAGA: Możesz przećwiczyć następujące ćwiczenie XPath https://demo.guru99.com/test/selenium-xpath.html
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.
Obserwowanie rodzeństwa w XPath
A Rodzeństwo w Selenium Sterownik internetowy jest funkcją używaną do pobierania elementu sieciowego, który jest rodzeństwem elementu nadrzędnego. Jeśli element nadrzędny jest znany, element sieciowy można łatwo znaleźć lub zlokalizować, co umożliwia użycie atrybutu rodzeństwa wyrażenia Xpath w selenium webdriver.
Przykład rodzeństwa w XPath:
Tutaj na podstawie elementu rodzeństwa „a” znajdujemy „h4”
"//div[@class='canvas- graph']//a[@href='/accounting.html'][i[@class='icon-usd']]/following-sibling::h4"
Przodek: Aby znaleźć element na podstawie elementu nadrzędnego, możemy użyć atrybutu przodka XPath.
Pozwala zrozumieć te 3 funkcje na przykładzie –
Kroki testowe:
Uwaga: Od daty utworzenia samouczka strona główna Guru99 została zaktualizowana, więc zamiast tego korzystaj z witryny demonstracyjnej, aby przeprowadzić testy
- Iść do https://demo.guru99.com/test/guru99home/
- W sekcji „Kilka naszych najpopularniejszych kursów” wyszukaj wszystkie elementy sieci Web, które są elementami pokrewnymi elementu sieci Web, którego tekstem jest „SELENIUM”
- Znajdziemy element za pomocą tekstu XPath zawierającego funkcję przodka i rodzeństwa.
USING Zawiera tekst i rodzeństwo XPath
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 { @Test public void testSiblingAndParentInXpath(){ WebDriver driver; String driverPath = "C:\\geckodriver.exe"; System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://demo.guru99.com/test/guru99home/"); //Search element inside 'Popular course' which are sibling of control 'SELENIUM' ,Here first we will find a h2 whose text is ''A few of our most popular courses' ,then we move to its parent element which is a 'div' , inside this div we will find a link whose text is 'SELENIUM' then at last we will find all of the sibling elements of this link('SELENIUM') List <WebElement> dateBox = driver.findElements(By.xpath("//h2[contains(text(),'A few of our most popular courses')]/parent::div//div[//a[text()='SELENIUM']]/following-sibling::div[@class='rt-grid-2 rt-omega']")); //Print all the which are sibling of the the element named as 'SELENIUM' in 'Popular course' for (WebElement webElement : dateBox) { System.out.println(webElement.getText()); } driver.close(); } }
Dane wyjściowe będą takie:
Przodek XPath w Selenium
Przodek XPath w Selenium jest funkcją używaną do znajdowania przodka określonego członka na określonej warstwie. Poziom przodka, który ma zostać zwrócony lub poziom przodka względem poziomu członka może być wyraźnie określony. Zwraca liczbę kroków hierarchicznych od przodka, lokalizując określonego przodka, którego chce użytkownik.
Załóżmy teraz, że musimy przeszukać wszystkie elementy w sekcji „Popularne kursy” za pomocą przodka kotwicy, której tekstem jest „SELENIUM”
Tutaj będzie wyglądało nasze zapytanie xpath
"//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{ @Test public void testAncestorInXpath(){ WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://demo.guru99.com/test/guru99home/"); //Search All elements in 'Popular course' section //with the help of ancestor of the anchor whose text is 'SELENIUM' List <WebElement> dateBox = driver.findElements(By.xpath("//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div")); //Print all the which are sibling of the element named as 'SELENIUM' in 'Popular course' for (WebElement webElement : dateBox) { System.out.println(webElement.getText()); } driver.quit(); } }
Dane wyjściowe będą wyglądać następująco:
Używanie AND i OR
Używając AND i OR, możesz umieścić 2 warunki w naszym wyrażeniu XPath.
- W przypadku AND oba 2 warunki powinny być prawdziwe, wtedy tylko znajdzie element.
- W przypadku OR którykolwiek z dwóch warunków powinien być prawdziwy, wtedy tylko znajdzie element.
Tutaj będzie wyglądało nasze zapytanie XPath
Xpath=//*[@type='submit' OR @name='btnReset']
Xpath=//input[@type='submit' and @name='btnLogin']
Kroki testowe:
- Iść do https://demo.guru99.com/v1/
- W tej sekcji wykorzystam powyższą witrynę demonstracyjną do wyszukiwania elementów z różnymi funkcjami XPath.
Element znajdziesz za pomocą osi AND i OR, rodzica, początku i XPath
ORAZ LUB Przykład
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class AND_OR { public static void main(String[] args) { WebDriver driver; WebElement w,x; System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe"); driver= new ChromeDriver(); // Launch the application driver.get("https://www.guru99.com/"); //Search element using OR in the xpath w=driver.findElement(By.xpath("//*[@type='submit' OR @name='btnReset']")); //Print the text of the element System.out.println(w.getText()); //Search element using AND in the xpath x=driver.findElement(By.xpath("//input[@type='submit' and @name='btnLogin']")); //Print the text of the searched element System.out.println(x.getText()); //Close the browser driver.quit(); } }
Rodzic XPath w Selenium
Rodzic w Selenium to metoda używana do pobrania węzła nadrzędnego bieżącego węzła wybranego na stronie internetowej. Jest to bardzo przydatne w sytuacji, gdy wybierasz element i chcesz uzyskać element nadrzędny za pomocą Xpath. Ta metoda jest również używana do uzyskania rodzica rodzica.
Tutaj będzie wyglądało nasze zapytanie XPath
Xpath=//*[@id='rt-feature']//parent::div
XPath przy użyciu rodzica
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) { WebDriver driver; WebElement w; System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe"); driver= new ChromeDriver(); // Launch the application driver.get("https://www.guru99.com/"); //Search the element by using PARENT w=driver.findElement(By.xpath("//*[@id='rt-feature']//parent::div")); //Print the text of the searched element System.out.println(w.getText()); //Close the browser driver.quit(); } }
Zaczynać z
Za pomocą funkcji Starts-with można znaleźć element, którego atrybut zmienia się dynamicznie podczas odświeżania lub innych operacji, takich jak kliknięcie, przesłanie itp.
Tutaj będzie wyglądało nasze zapytanie XPath
Xpath=//label[starts-with(@id,'message')]
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) { WebDriver driver; WebElement w; System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe"); driver= new ChromeDriver(); // Launch the application driver.get("https://www.guru99.com/"); //Search the element by using starts-with w=driver.findElement(By.xpath("//label[starts-with(@id,'message')]")); //Print the text of the searched element System.out.println(w.getText()); //Close the browser 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 znajdowania elementu. Tutaj omówimy kilka metod.
następujący: Ta funkcja zwróci bezpośredni element konkretnego komponentu.
Tutaj będzie wyglądało nasze zapytanie XPath
Xpath=//*[@type='text']//following::input
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class Following { public static void main(String[] args) { WebDriver driver; WebElement w; System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe"); driver= new ChromeDriver(); // Launch the application driver.get("https://www.guru99.com/"); //Search the element by using Following method w=driver.findElement(By.xpath("//*[@type='text']//following::input")); //Print the text of the searched element System.out.println(w.getText()); //Close the browser driver.quit(); } }
Poprzedzający: Ta funkcja zwróci element poprzedzający konkretnego elementu.
Tutaj będzie wyglądało nasze zapytanie XPath
Xpath= //*[@type='submit']//preceding::input
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) { WebDriver driver; WebElement w; System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe"); driver= new ChromeDriver(); // Launch the application driver.get("https://www.guru99.com/"); //Search the element by using preceding method w=driver.findElement(By.xpath("//*[@type='submit']//preceding::input")); //Print the searched element System.out.println(w.getText()); //Close the browser driver.quit(); } }
d) Malejąco: Ta funkcja zwróci element potomny określonego elementu.
Tutaj będzie wyglądało nasze zapytanie XPath
Xpath= //*[@id='rt-feature']//descendant::a
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) { WebDriver driver; WebElement w; System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe"); driver= new ChromeDriver(); // Launch the application driver.get("https://www.guru99.com/"); //Search the element by using descendant method w=driver.findElement(By.xpath("//*[@id='rt-feature']//descendant::a")); //Print the searched element System.out.println(w.getText()); //Close the browser driver.quit(); } }
Podsumowanie
- W niektórych sytuacjach do znalezienia elementu nie można użyć zwykłego XPath. W takiej sytuacji potrzebujemy innych funkcji z zapytania xpath.
- Istnieją pewne ważne funkcje XPath, takie jak zawartość XPath, element nadrzędny, przodkowie, następujące rodzeństwo itp.
- Za pomocą tych funkcji można tworzyć złożone wyrażenia XPath.