XPath Inneholder: Tekst, Følge søsken og Ancestor in Selenium
Hva inneholder XPath?
XPath inneholder er en funksjon i Xpath-uttrykk som brukes til å søke etter webelementene som inneholder en bestemt tekst. Vi kan trekke ut alle elementene som samsvarer med den gitte tekstverdien ved å bruke funksjonen XPath contains() på hele nettsiden. Inneholder i XPath har muligheten til å finne elementet med delvis tekst.
Eksempel – inneholder tekst
Her søker vi et anker .inneholder tekst som 'SAP M'.
"//h4/a[contains(text(),'SAP M')]"
MERK: Du kan trene følgende XPath-øvelse på dette https://demo.guru99.com/test/selenium-xpath.html
Hvis en enkel XPath ikke er i stand til å finne et komplisert webelement for testskriptet vårt, må vi bruke funksjonene fra XPath 1.0-biblioteket. Med kombinasjonen av disse funksjonene kan vi lage mer spesifikke XPath.
Følger søsken i XPath
A Søsken inn Selenium Webdriver er en funksjon som brukes til å hente et webelement som er et søsken til det overordnede elementet. Hvis det overordnede elementet er kjent, kan webelementet lett finnes eller lokaliseres som kan bruke søskenattributtet til Xpath-uttrykket i selenium webdriver.
Søsken i XPath Eksempel:
Her på grunnlag av søskenelementet av 'a' finner vi 'h4'
"//div[@class='canvas- graph']//a[@href='/accounting.html'][i[@class='icon-usd']]/following-sibling::h4"
Ancestor: For å finne et element på grunnlag av det overordnede elementet kan vi bruke forfedreattributtet til XPath.
La oss forstå disse 3 funksjonene ved å bruke et eksempel -
Testtrinn:
OBS: Siden opprettingsdatoen for opplæringen har hjemmesiden til Guru99 blitt oppdatert, så bruk demosiden i stedet for å kjøre tester
- Gå til https://demo.guru99.com/test/guru99home/
- I delen 'Noen av våre mest populære kurs', søk i alle nettelementer som er søsken til et WebElement hvis tekst er 'SELENIUM'
- Vi vil finne element som bruker XPath-tekst inneholder ,forfedre og søskenfunksjon.
BRUK Inneholder tekst og XPath-søsken
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(); } }
Utgangen vil være slik:
XPath Ancestor in Selenium
XPath Ancestor in Selenium er en funksjon som brukes til å finne stamfaren til et spesifikt medlem på det angitte laget. Nivået på stamfaren som skal returneres eller nivået til stamfaren i forhold til nivået til medlemmet kan spesifiseres eksplisitt. Den returnerer antall hierarkiske trinn fra stamfaren, og finner den spesifiserte stamfaren som brukeren ønsker.
Anta nå at vi må søke etter alle elementer i 'Populært kurs'-delen ved hjelp av stamfaren til ankeret hvis tekst er 'SELENIUM'
Her vil xpath-søket vårt være slik
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div"
Komplett kode
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(); } }
Utgangen vil se ut som-
Bruk AND og OR
Ved å bruke AND og OR kan du sette 2 betingelser i vårt XPath-uttrykk.
- I tilfelle AND skal begge forholdene være sanne, er det bare den som finner elementet.
- I tilfelle OR skal en av de 2 betingelsene være sanne, da er det bare den som finner elementet.
Her vil vår XPath-spørring være slik
Xpath=//*[@type='submit' OR @name='btnReset']
Xpath=//input[@type='submit' and @name='btnLogin']
Testtrinn:
- Gå til https://demo.guru99.com/v1/
- I seksjonen vil du bruke demosiden ovenfor for å søke i element med forskjellige funksjoner til XPath.
Du vil finne et element som bruker AND og OR, overordnet, starter-med og XPath-aksene
OG ELLER Eksempel
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-foreldre i Selenium
Forelder i Selenium er en metode som brukes til å hente den overordnede noden til den gjeldende noden som er valgt på nettsiden. Det er veldig nyttig i situasjonen når du velger et element og trenger å få det overordnede elementet ved hjelp av Xpath. Denne metoden brukes også for å få foreldrenes forelder.
Her vil vår XPath-spørring være slik
Xpath=//*[@id='rt-feature']//parent::div
XPath ved hjelp av overordnet
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(); } }
Starter-med
Ved å bruke Starter-med-funksjonen kan du finne elementet hvis attributt endres dynamisk ved oppdatering eller andre operasjoner som klikk, send, osv.
Her vil vår XPath-spørring være slik
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-akser
Ved å bruke XPath-akser kan du finne de dynamiske og svært komplekse elementene på en nettside. XPath-akser inneholder flere metoder for å finne et element. Her vil vi diskutere noen få metoder.
etter: Denne funksjonen vil returnere det umiddelbare elementet til den bestemte komponenten.
Her vil vår XPath-spørring være slik
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(); } }
Foregående: Denne funksjonen vil returnere det foregående elementet til det bestemte elementet.
Her vil vår XPath-spørring være slik
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) Synkende: Denne funksjonen vil returnere det etterkommere elementet til det bestemte elementet.
Her vil vår XPath-spørring være slik
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(); } }
Sammendrag
- Det er noen situasjoner hvor vanlig XPath ikke kan brukes til å finne et element. I en slik situasjon trenger vi andre funksjoner enn xpath-spørringen.
- Det er noen viktige XPath-funksjoner som XPath inneholder, foreldre, forfedre, etterfølgende søsken, etc.
- Ved hjelp av disse funksjonene kan du lage komplekse XPath-uttrykk. Hvis du trenger å forstå hvordan du bruker inneholder spesifikt i XPath, gir funksjonen inneholder i selen en enkel måte å søke i nettelementer basert på delvis tekstmatch.