XPath obsahuje: text, následování sourozence a předka Selenium
Co obsahuje XPath?
XPath obsahuje je funkce ve výrazu Xpath, která se používá k vyhledávání prvků webu, které obsahují konkrétní text. Všechny prvky, které odpovídají dané textové hodnotě, můžeme extrahovat pomocí funkce XPath obsahuje() na celé webové stránce. Obsahuje v XPath má schopnost najít prvek s částečným textem.
Příklad – obsahuje text
Zde hledáme kotvu .obsahuje text jako „SAP M'.
"//h4/a[contains(text(),'SAP M')]"
POZNÁMKA: Na tomto si můžete procvičit následující cvičení XPath https://demo.guru99.com/test/selenium-xpath.html
Pokud jednoduchý XPath není schopen najít složitý webový prvek pro náš testovací skript, musíme použít funkce z knihovny XPath 1.0. Kombinací těchto funkcí můžeme vytvořit konkrétnější XPath.
Sledování sourozence v XPath
A Sourozenec v Selenium Webdriver je funkce používaná k načtení webového prvku, který je sourozencem nadřazeného prvku. Pokud je znám nadřazený prvek, lze snadno najít nebo najít webový prvek, který může používat sourozenecký atribut výrazu Xpath v selenovém webovém ovladači.
Sourozenec v XPath Příklad:
Zde na základě sourozeneckého prvku „a“ nacházíme „h4“
"//div[@class='canvas- graph']//a[@href='/accounting.html'][i[@class='icon-usd']]/following-sibling::h4"
Předek: K nalezení prvku na základě rodičovského prvku můžeme použít atribut ancestor XPath.
Pojďme pochopit tyto 3 funkce na příkladu –
Testovací kroky:
Poznámka: Od data vytvoření tutoriálu byla domovská stránka Guru99 aktualizována, takže ke spuštění testů použijte místo toho demo web
- Jít do https://demo.guru99.com/test/guru99home/
- V sekci „Několik našich nejoblíbenějších kurzů“ prohledejte všechny webové prvky, které jsou sourozenci webového prvku, jehož text je „SELENIUM“
- Najdeme prvek využívající XPath text obsahuje ,předek a sourozeneckou funkci.
POUŽÍVÁNÍ Obsahuje Text a XPath Sourozence
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(); } }
Výstup bude takový:
Předek XPath v Selenium
Předek XPath v Selenium je funkce sloužící k nalezení předka konkrétního členu na zadané vrstvě. Úroveň předka, která má být vrácena, nebo úroveň předka vzhledem k úrovni člena lze explicitně zadat. Vrací počet hierarchických kroků od předka a najde zadaného předka, kterého uživatel chce.
Nyní předpokládejme, že potřebujeme prohledat všechny prvky v sekci 'Populární kurz' s pomocí předka kotvy, jejíž text je 'SELENIUM'
Zde bude vypadat náš dotaz xpath
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div"
Kompletní kód
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(); } }
Výstup bude vypadat -
Pomocí AND a OR
Pomocí AND a OR můžete do našeho výrazu XPath vložit 2 podmínky.
- V případě AND by měly být splněny obě 2 podmínky, pak prvek najde pouze on.
- V případě OR by měla být splněna kterákoli ze 2 podmínek, pak prvek najde pouze ona.
Zde bude vypadat náš dotaz XPath
Xpath=//*[@type='submit' OR @name='btnReset']
Xpath=//input[@type='submit' and @name='btnLogin']
Testovací kroky:
- Jít do https://demo.guru99.com/v1/
- V této sekci použijeme výše uvedenou ukázkovou stránku k vyhledání prvku s různými funkcemi XPath.
Prvek najdete pomocí AND a OR, rodičovské osy, os začíná s a XPath
A NEBO Příklad
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(); } }
Parent XPath v Selenium
Rodič v Selenium je metoda používaná k načtení nadřazeného uzlu aktuálního uzlu vybraného na webové stránce. Je to velmi užitečné v situaci, kdy vyberete prvek a potřebujete získat rodičovský prvek pomocí Xpath. Tato metoda se také používá k získání rodiče rodiče.
Zde bude vypadat náš dotaz XPath
Xpath=//*[@id='rt-feature']//parent::div
XPath pomocí 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) { 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(); } }
Začíná s
Pomocí funkce Starts-with můžete najít prvek, jehož atribut se dynamicky mění při obnově nebo jiných operacích, jako je kliknutí, odeslání atd.
Zde bude vypadat náš dotaz 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(); } }
osy Xpath
Pomocí os XPath můžete na webové stránce najít dynamické a velmi složité prvky. Osy XPath obsahují několik metod k nalezení prvku. Zde budeme diskutovat o několika metodách.
následující: Tato funkce vrátí okamžitý prvek konkrétní komponenty.
Zde bude vypadat náš dotaz 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(); } }
Předchozí: Tato funkce vrátí předchozí prvek konkrétního prvku.
Zde bude vypadat náš dotaz 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) Klesající: Tato funkce vrátí potomek prvku konkrétního prvku.
Zde bude vypadat náš dotaz 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(); } }
Shrnutí
- V některých situacích nelze k nalezení prvku použít běžnou cestu XPath. V takové situaci potřebujeme různé funkce z dotazu xpath.
- Existují některé důležité funkce XPath, jako je XPath obsahuje, rodič, předci, následující sourozenec atd.
- Pomocí těchto funkcí můžete vytvářet složité výrazy XPath. Pokud potřebujete pochopit, jak konkrétně používat obsahuje v XPath, funkce obsahuje v selenu poskytuje snadný způsob, jak prohledávat webové prvky na základě částečné shody textu.