XPath Innehåller: Text, Följa syskon och Ancestor in Selenium
Vad innehåller XPath?
XPath innehåller är en funktion inom Xpath uttryck som används för att söka efter webbelement som innehåller en viss text. Vi kan extrahera alla element som matchar det givna textvärdet med hjälp av funktionen XPath contains() på hela webbsidan. Innehåller i XPath har förmågan att hitta elementet med deltext.
Exempel – innehåller text
Här söker vi ett ankare .innehåller text som 'SAP M'.
"//h4/a[contains(text(),'SAP M')]"
OBS: Du kan träna följande XPath-övning på detta https://demo.guru99.com/test/selenium-xpath.html
Om en enkel XPath inte kan hitta ett komplicerat webbelement för vårt testskript måste vi använda funktionerna från XPath 1.0-biblioteket. Med kombinationen av dessa funktioner kan vi skapa mer specifik XPath.
Följer syskon i XPath
A Syskon in Selenium Webdriver är en funktion som används för att hämta ett webbelement som är ett syskon till det överordnade elementet. Om det överordnade elementet är känt kan webbelementet lätt hittas eller lokaliseras som kan använda sibling-attributet för Xpath-uttrycket i selenium webdriver.
Syskon i XPath Exempel:
Här på basis av syskonelementet i 'a' hittar vi 'h4'
"//div[@class='canvas- graph']//a[@href='/accounting.html'][i[@class='icon-usd']]/following-sibling::h4"
Förfader: För att hitta ett element på basis av det överordnade elementet kan vi använda ancestor-attributet för XPath.
Låt oss förstå dessa 3 funktioner med ett exempel -
Teststeg:
Notera: Sedan datumet för skapandet av handledningen har hemsidan för Guru99 uppdaterats så använd demosidan istället för att köra tester
- Gå till https://demo.guru99.com/test/guru99home/
- I avsnittet "Några av våra mest populära kurser", sök i alla webbelement som är syskon till ett WebElement vars text är "SELENIUM"
- Vi kommer att hitta element som använder XPath text innehåller ,förfader och syskonfunktion.
ANVÄNDA Innehåller text och XPath-syskon
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(); } }
Utgången blir så här:
XPath Ancestor in Selenium
XPath Ancestor in Selenium är en funktion som används för att hitta förfadern till en specifik medlem i det angivna lagret. Nivån på förfader som ska returneras eller nivå för förfader i förhållande till nivån på medlemmen kan uttryckligen specificeras. Den returnerar antalet hierarkiska steg från förfadern och lokaliserar den specificerade förfader som användaren vill ha.
Anta nu att vi måste söka efter alla element i avsnittet "Populär kurs" med hjälp av förfadern till ankaret vars text är "SELENIUM"
Här kommer vår xpath-fråga att se ut
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div"
Komplett 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(); } }
Utdata kommer att se ut som-
Använder AND och OR
Genom att använda AND och OR kan du sätta 2 villkor i vårt XPath-uttryck.
- I fallet med OCH ska båda villkoren vara sanna, då är det bara den som hittar elementet.
- I fallet med OR bör vilket som helst av de två villkoren vara sant då bara det hittar elementet.
Här kommer vår XPath-fråga att se ut
Xpath=//*[@type='submit' OR @name='btnReset']
Xpath=//input[@type='submit' and @name='btnLogin']
Teststeg:
- Gå till https://demo.guru99.com/v1/
- I avsnittet kommer att använda ovanstående demosida för att söka element med olika funktioner i XPath.
Du hittar ett element som använder AND och OR, parent, starts-with och XPath-axlar
OCH ELLER Exempel
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(); } }
XPath-förälder i Selenium
Förälder i Selenium är en metod som används för att hämta föräldranoden för den aktuella noden som valts på webbsidan. Det är mycket användbart i situationen när du väljer ett element och behöver hämta det överordnade elementet med Xpath. Denna metod används också för att få förälderns förälder.
Här kommer vår XPath-fråga att se ut
Xpath=//*[@id='rt-feature']//parent::div
XPath använder förälder
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(); } }
Börjar med
Med funktionen Starts-with kan du hitta elementet vars attribut dynamiskt ändras vid uppdatering eller andra operationer som klick, submit, etc.
Här kommer vår XPath-fråga att se ut
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(); } }
Xpath axlar
Genom att använda XPath-axlar kan du hitta de dynamiska och mycket komplexa elementen på en webbsida. XPath-axlar innehåller flera metoder för att hitta ett element. Här kommer att diskutera några metoder.
efter: Den här funktionen returnerar det omedelbara elementet för den specifika komponenten.
Här kommer vår XPath-fråga att se ut
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(); } }
Föregående: Denna funktion kommer att returnera det föregående elementet i det specifika elementet.
Här kommer vår XPath-fråga att se ut
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) Nedåtgående: Denna funktion kommer att returnera det underordnade elementet för det specifika elementet.
Här kommer vår XPath-fråga att se ut
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(); } }
Sammanfattning
- Det finns vissa situationer när vanlig XPath inte kan användas för att hitta ett element. I en sådan situation behöver vi andra funktioner än xpath-frågan.
- Det finns några viktiga XPath-funktioner som XPath innehåller, förälder, förfäder, efterföljande syskon, etc.
- Med hjälp av dessa funktioner kan du skapa komplexa XPath-uttryck.