Hvis en simpel XPath ikke er i stand til at finde et kompliceret webelement til vores test script, skal vi bruge funktionerne fra XPath 1.0 biblioteket. Med kombinationen af disse funktioner kan vi oprette mere specifik XPath. Lad os diskutere en 3 sådanne funktioner -
- Indeholder
- Søskende
- Forfader
- Og ELLER
- Forælder
- Starter med
- XPath-akser
Lad os studere dem detaljeret -
Hvad indeholder () i selen?
indeholder () i Selen er en funktion inden for Xpath-udtryk, der bruges til at søge efter de webelementer, der indeholder en bestemt tekst. Vi kan udtrække alle de elementer, der matcher den givne tekstværdi ved hjælp af XPath indeholder () -funktionen på hele websiden. Indeholder i XPath har evnen til at finde elementet med delvis tekst.
Eks. Her søger vi et anker. Indeholder tekst som 'SAP M'.
"// h4 / a [indeholder (tekst (), 'SAP M')]"
BEMÆRK: Du kan øve følgende XPath-øvelse på denne http://demo.guru99.com/test/selenium-xpath.html
Hvad er søskende i Selen Webdriver?
Et søskende i Selen Webdriver er en funktion, der bruges til at hente et webelement, der er et søskende til det overordnede element. Hvis det overordnede element er kendt, kan webelementet let findes eller lokaliseres, der kan bruge søskendeattributten til Xpath-udtrykket i selen webdriver.
Søskende i XPath Eksempel: Her på basis af søskendeelement af 'a' finder vi 'h4'
"// div [@ class = 'canvas- graph'] // a [@href = '/ accounting.html'] [i [@ class = 'icon-usd']] / følgende søskende :: h4"
Forfader : For at finde et element på basis af det overordnede element kan vi bruge forfaderattributten XPath.
Lad os forstå disse 3 funktioner ved hjælp af et eksempel -
Test trin
Bemærk: Siden datoen for oprettelsen af tutorial er hjemmesiden for Guru99 blevet opdateret, så brug demo-stedet i stedet for at køre tests
- Gå til http://demo.guru99.com/test/guru99home/
- I afsnittet 'Et par af vores mest populære kurser' skal du søge i alle webelementer, der er søskende til et WebElement, hvis tekst er 'SELENIUM'
- Vi finder element ved hjælp af XPath-tekst indeholder, forfader og søskende funktion.
BRUG Indeholder og XPath søskende
importere java.util.List;import java.util.concurrent.TimeUnit;importer 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;offentlig klasse SiblingAndParentInXpath {@Prøvepublic void testSiblingAndParentInXpath () {WebDriver driver;Streng driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);driver = ny FirefoxDriver ();driver.manage (). timeouts (). implicitWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Søgeelement inden i 'Populært kursus', der er søskende til kontrol 'SELENIUM', Her finder vi først en h2, hvis tekst er '' Et par af vores mest populære kurser ', så flytter vi til dets overordnede element, som er div ', inden i denne div finder vi et link, hvis tekst er' SELENIUM ', så finder vi endelig alle søskendeelementerne i dette link (' SELENIUM ')ListedateBox = driver.findElements (By.xpath ("// h2 [indeholder (tekst (), 'Et par af vores mest populære kurser')] / forælder :: div // div [// a [tekst () = 'SELENIUM']] / følgende søskende :: div [@ class = 'rt-grid-2 rt-omega'] "));// Udskriv alle de søskende til det element, der hedder 'SELENIUM' i 'Populær kursus'for (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.close ();}}
Output vil være som:
Forfader i Selen Webdriver
Forfader i Selen Webdriver er en funktion, der bruges til at finde forfædren til et specifikt medlem ved det angivne lag. Niveauet af forfader, der skal returneres eller niveauet for forfædren i forhold til niveauet for medlemmet, kan udtrykkeligt specificeres. Det returnerer antallet af hierarkiske trin fra forfædren og lokaliserer den angivne forfader, som brugeren ønsker.
Antag nu, at vi har brug for at søge i alle elementer i afsnittet 'Populær kursus' ved hjælp af forfader til ankeret, hvis tekst er 'SELENIUM'
Her vil vores xpath-forespørgsel være som
"//div [.//a [tekst()='SELENIUM']] / anestor :: div [@class='rt-grid-2 rt-omega '] / følgende søskende :: div
Komplet kode
importere java.util.List;import java.util.concurrent.TimeUnit;importer 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;offentlig klasse AncestorInXpath {@Prøveoffentlig ugyldig testAncestorInXpath () {WebDriver-driver = ny FirefoxDriver ();driver.manage (). timeouts (). implicitWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Søg i alle elementer i afsnittet 'Populært kursus'// ved hjælp af forfader til ankeret, hvis tekst er 'SELENIUM'ListedateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / forfader :: div [@ class = 'rt-grid-2 rt- omega '] / følgende søskende :: div "));// Udskriv alle de søskende til det element, der hedder 'SELENIUM' i 'Populært kursus'for (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}
Output vil se ud som-
Brug af AND og OR
Ved at bruge AND og OR kan du sætte 2 betingelser i vores XPath-udtryk.
- I tilfælde af OG skal begge to betingelser være sande, så finder det kun elementet.
- I tilfælde af ELLER en af de to betingelser skal være sande, finder det kun elementet.
Her vil vores XPath-forespørgsel være som
Xpath = // * [@ type = 'send' ELLER @ navn = 'btnReset']
Xpath = // input [@ type = 'send' og @ name = 'btnLogin']
Test trin:
- Gå til http://demo.guru99.com/v1/
- I afsnittet bruger ovenstående demo-side til at søge element med forskellige funktioner i XPath.
Du finder et element ved hjælp af AND og OR, forælder, starter-med og XPath akser
OG ELLER Eksempel
importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;offentlig klasse 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 = ny ChromeDriver ();// Start applikationendriver.get ("https://www.guru99.com/");// Søgeelement ved hjælp af OR i xpathw = driver.findElement (By.xpath ("// * [@ type = 'send' ELLER @ navn = 'btnReset']"));// Udskriv elementets tekstSystem.out.println (w.getText ());// Søgeelement ved hjælp af AND i xpathx = driver.findElement (By.xpath ("// input [@ type = 'send' og @ name = 'btnLogin']"));// Udskriv teksten til det søgte elementSystem.out.println (x.getText ());// Luk browserendriver.quit ();}}
Hvad er forælder i selen?
Forælder i selen er en metode, der bruges til at hente den overordnede node for den aktuelle node, der er valgt på websiden. Det er meget nyttigt i situationen, når du vælger et element og har brug for at hente det overordnede element ved hjælp af Xpath. Denne metode bruges også til at få forældrenes forælder.
Her vil vores XPath-forespørgsel være som
Xpath = // * [@ id = 'rt-funktion'] // forælder :: div
XPath ved hjælp af forælder
importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;offentlig klasse Forælder {public static void main (String [] args) {WebDriver driver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = ny ChromeDriver ();// Start applikationendriver.get ("https://www.guru99.com/");// Søg i elementet ved hjælp af PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-funktion'] // forælder :: div"));// Udskriv teksten til det søgte elementSystem.out.println (w.getText ());// Luk browserendriver.quit ();}}
Starter med
Ved hjælp af Starts-with-funktionen kan du finde det element, hvis attribut dynamisk ændres ved opdatering eller andre handlinger som klik, send osv.
Her vil vores XPath-forespørgsel være som
Xpath = // label [starter-med (@ id, 'besked')]
importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;offentlig klasse StartsWith {public static void main (String [] args) {WebDriver driver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = ny ChromeDriver ();// Start applikationendriver.get ("https://www.guru99.com/");// Søg i elementet ved hjælp af start-medw = driver.findElement (By.xpath ("// label [starter-med (@ id, 'besked')]"));// Udskriv teksten til det søgte elementSystem.out.println (w.getText ());// Luk browserendriver.quit ();}}
Xpath-akser
Ved at bruge XPath-akser kan du finde de dynamiske og meget komplekse elementer på en webside. XPath-akser indeholder flere metoder til at finde et element. Her diskuteres et par metoder.
følgende : Denne funktion returnerer det øjeblikkelige element i den bestemte komponent.
Her vil vores XPath-forespørgsel være som
Xpath = // * [@ type = 'text'] // følgende :: input
XPath ved hjælp af følgende
importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;offentlig klasse Efter {public static void main (String [] args) {WebDriver driver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = ny ChromeDriver ();// Start applikationendriver.get ("https://www.guru99.com/");// Søg i elementet ved hjælp af Følgende metodew = driver.findElement (By.xpath ("// * [@ type = 'text'] // følgende :: input"));// Udskriv teksten til det søgte elementSystem.out.println (w.getText ());// Luk browserendriver.quit ();}}
Forudgående: Denne funktion returnerer det foregående element for det bestemte element.
Her vil vores XPath-forespørgsel være som
Xpath = // * [@ type = 'send'] // foregående :: input
XPath ved hjælp af foregående
importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;offentlig klasse forud for {public static void main (String [] args) {WebDriver driver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = ny ChromeDriver ();// Start applikationendriver.get ("https://www.guru99.com/");// Søg i elementet ved hjælp af den foregående metodew = driver.findElement (By.xpath ("// * [@ type = 'send'] // foregående :: input"));// Udskriv det søgte elementSystem.out.println (w.getText ());// Luk browserendriver.quit ();}}
d) Efterkommer: Denne funktion returnerer det efterfølgende element for det bestemte element.
Her vil vores XPath-forespørgsel være som
Xpath = // * [@ id = 'rt-funktion'] // efterkommer :: a
XPath ved hjælp af Descendant
importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;offentlig klasse Efterkommer {public static void main (String [] args) {WebDriver driver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = ny ChromeDriver ();// Start applikationendriver.get ("https://www.guru99.com/");// Søg i elementet ved hjælp af afstamningsmetodenw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // efterkommer :: a"));// Udskriv det søgte elementSystem.out.println (w.getText ());// Luk browserendriver.quit ();}}
Resumé
- Der er nogle situationer, hvor almindelig XPath ikke kan bruges til at finde et element. I en sådan situation har vi brug for forskellige funktioner fra xpath-forespørgslen.
- Der er nogle vigtige XPath-funktioner som XPath indeholder, forældre, forfædre, efter-søskende osv.
- Ved hjælp af disse funktioner kan du oprette komplekse XPath-udtryk.