Als een eenvoudig XPath geen gecompliceerd webelement voor ons testscript kan vinden, moeten we de functies uit de XPath 1.0-bibliotheek gebruiken. Met de combinatie van deze functies kunnen we meer specifieke XPath maken. Laten we 3 van dergelijke functies bespreken -
- Bevat
- Broer of zus
- Voorouder
- En OF
- Ouder
- Begint met
- XPath-assen
Laten we ze in detail bestuderen -
Wat zit er () in selenium?
bevat () in Selenium is een functie binnen de Xpath-expressie die wordt gebruikt om te zoeken naar webelementen die een bepaalde tekst bevatten. We kunnen alle elementen die overeenkomen met de gegeven tekstwaarde extraheren met behulp van de XPath contains () -functie op de webpagina. Bevat in XPath heeft de mogelijkheid om het element met gedeeltelijke tekst te vinden.
Ex. Hier zoeken we een anker. Bevat tekst als 'SAP M'.
"// h4 / a [bevat (text (), 'SAP M')] '
OPMERKING: u kunt de volgende XPath-oefening oefenen op deze http://demo.guru99.com/test/selenium-xpath.html
Wat is broer of zus in Selenium Webdriver?
Een broer of zus in Selenium Webdriver is een functie die wordt gebruikt om een webelement op te halen dat een broer of zus is van het bovenliggende element. Als het bovenliggende element bekend is, kan het webelement gemakkelijk worden gevonden of gelokaliseerd dat het sibling-attribuut van de Xpath-expressie in selenium webdriver kan gebruiken.
Broer / zus in XPath Voorbeeld: hier vinden we op basis van het broer / zus-element van 'a' 'h4'
"// div [@ class = 'canvas- graph'] // a [@href = '/ accounting.html'] [i [@ class = 'icon-usd']] / volgende broer of zus :: h4"
Ancestor : om een element te vinden op basis van het parent-element, kunnen we het ancestor-attribuut van XPath gebruiken.
Laten we deze 3 functies begrijpen aan de hand van een voorbeeld -
Teststappen
Opmerking: sinds de aanmaakdatum van de tutorial is de homepage van Guru99 bijgewerkt, dus gebruik in plaats daarvan de demo-site om tests uit te voeren
- Ga naar http://demo.guru99.com/test/guru99home/
- Zoek in de sectie 'Enkele van onze meest populaire cursussen' alle webelementen die verwant zijn aan een WebElement waarvan de tekst 'SELENIUM' is
- We zullen element vinden met behulp van XPath-tekst bevat, voorouder en broer / zus-functie.
GEBRUIK Bevat en XPath Sibling
importeer java.util.List;importeer java.util.concurrent.TimeUnit;import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.firefox.FirefoxDriver;importeer org.testng.annotations.Test;openbare klasse SiblingAndParentInXpath {@Testopenbare ongeldige testSiblingAndParentInXpath () {WebDriver-stuurprogramma;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);driver = nieuwe FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Zoekelement in 'Populaire cursus' die broer of zus is van controle 'SELENIUM'. Hier vinden we eerst een h2 waarvan de tekst is '' Een paar van onze meest populaire cursussen ', daarna gaan we naar het bovenliggende element dat a' is. div ', in deze div zullen we een link vinden waarvan de tekst' SELENIUM 'is en dan zullen we eindelijk alle elementen van deze link vinden (' SELENIUM ')ListdateBox = driver.findElements (By.xpath ("// h2 [bevat (text (), 'Enkele van onze meest populaire cursussen')] / parent :: div // div [// a [text () = 'SELENIUM']] / volgende broer of zus: div [@ class = 'rt-grid-2 rt-omega'] "));// Print alle broers of zussen van het element met de naam 'SELENIUM' in 'Populaire cursus'voor (WebElement webElement: dateBox) {System.out.println (webElement.getText ());driver.close ();
De uitvoer zal zijn als:
Voorouder in Selenium Webdriver
Voorouder in Selenium Webdriver is een functie die wordt gebruikt om de voorouder van een specifiek lid op de opgegeven laag te vinden. Het niveau van de voorouder die moet worden geretourneerd of het niveau van de voorouder ten opzichte van het niveau van het lid, kan expliciet worden gespecificeerd. Het retourneert het aantal hiërarchische stappen van de voorouder, waarbij de opgegeven voorouder wordt gelokaliseerd die de gebruiker wil.
Stel nu dat we alle elementen in de sectie 'Populaire cursus' moeten doorzoeken met behulp van de voorouder van het anker waarvan de tekst 'SELENIUM' is
Hier zal onze xpath-vraag er als volgt uitzien
"//div-th[.//a[text()='SELENIUM'[[cher ]/ancestor::div[@class='rt-grid-2 rt-omega '] / volgende-broer / zus :: div"
Volledige code
importeer java.util.List;importeer java.util.concurrent.TimeUnit;import org.openqa.selenium.By;importeer org.openqa.selenium.Keys;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.firefox.FirefoxDriver;importeer org.testng.annotations.Test;openbare klasse AncestorInXpath {@Testopenbare ongeldige testAncestorInXpath () {WebDriver-stuurprogramma = nieuwe FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Zoek alle elementen in het gedeelte 'Populaire cursus'// met de hulp van de voorouder van het anker waarvan de tekst 'SELENIUM' isLijstdateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / ancestor :: div [@ class = 'rt-grid-2 rt- omega '] / volgende broer of zus :: div "));// Print alle broers of zussen van het element met de naam 'SELENIUM' in 'Populaire cursus'voor (WebElement webElement: dateBox) {System.out.println (webElement.getText ());driver.quit ();
De uitvoer ziet eruit als:
Met EN en OF
Door AND en OR te gebruiken, kun je 2 voorwaarden in onze XPath-expressie plaatsen.
- In het geval van AND zouden beide 2 voorwaarden waar moeten zijn, dan wordt alleen het element gevonden.
- In het geval van OR zou een van de 2 voorwaarden waar moeten zijn, dan wordt alleen het element gevonden.
Hier ziet onze XPath-query eruit als
Xpath = // * [@ type = 'submit' OR @ name = 'btnReset']
Xpath = // input [@ type = 'submit' en @ name = 'btnLogin']
Teststappen:
- Ga naar http://demo.guru99.com/v1/
- In de sectie, zal de bovenstaande demo-site gebruiken om elementen met verschillende functies van XPath te zoeken.
U vindt een element met AND- en OR-, parent-, start-with- en XPath-assen
EN OF Voorbeeld
import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.chrome.ChromeDriver;openbare les AND_OR {public static void main (String [] args) {WebDriver-stuurprogramma;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = nieuwe ChromeDriver ();// Start de applicatiedriver.get ("https://www.guru99.com/");// Zoek element met OR in het xpathw = driver.findElement (By.xpath ("// * [@ type = 'submit' OR @ name = 'btnReset']"));// Print de tekst van het elementSystem.out.println (w.getText ());// Zoek element met AND in het xpathx = driver.findElement (By.xpath ("// input [@ type = 'submit' en @ name = 'btnLogin']"));// Druk de tekst van het gezochte element afSystem.out.println (x.getText ());// Sluit de browserdriver.quit ();
Wat is ouder in selenium?
Parent in Selenium is een methode die wordt gebruikt om het bovenliggende knooppunt van het huidige knooppunt dat op de webpagina is geselecteerd, op te halen. Het is erg handig in de situatie waarin u een element selecteert en het bovenliggende element moet ophalen met Xpath. Deze methode wordt ook gebruikt om de ouder van de ouder te krijgen.
Hier ziet onze XPath-query eruit als
Xpath = // * [@ id = 'rt-feature'] // ouder :: div
XPath met behulp van Parent
import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.chrome.ChromeDriver;openbare klas Ouder {public static void main (String [] args) {WebDriver-stuurprogramma;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = nieuwe ChromeDriver ();// Start de applicatiedriver.get ("https://www.guru99.com/");// Zoek het element met PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// Druk de tekst van het gezochte element afSystem.out.println (w.getText ());// Sluit de browserdriver.quit ();
Begint met
Met de functie Starts-with kunt u het element vinden waarvan het attribuut dynamisch verandert bij vernieuwen of andere bewerkingen zoals klikken, verzenden, enz.
Hier ziet onze XPath-query eruit als
Xpath = // label [begint met (@ id, 'bericht')]
import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.chrome.ChromeDriver;openbare les StartsWith {public static void main (String [] args) {WebDriver-stuurprogramma;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = nieuwe ChromeDriver ();// Start de applicatiedriver.get ("https://www.guru99.com/");// Zoek het element met starts-withw = driver.findElement (By.xpath ("// label [begint met (@ id, 'bericht')]"));// Druk de tekst van het gezochte element afSystem.out.println (w.getText ());// Sluit de browserdriver.quit ();
Xpath-assen
Door XPath-assen te gebruiken, kunt u de dynamische en zeer complexe elementen op een webpagina vinden. XPath-assen bevatten verschillende methoden om een element te vinden. Hier zullen een paar methoden worden besproken.
volgende : Deze functie retourneert het directe element van de specifieke component.
Hier ziet onze XPath-query eruit als
Xpath = // * [@ type = 'text'] // volgende :: invoer
XPath met behulp van het volgende
import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.chrome.ChromeDriver;openbare les volgen {public static void main (String [] args) {WebDriver-stuurprogramma;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = nieuwe ChromeDriver ();// Start de applicatiedriver.get ("https://www.guru99.com/");// Zoek het element door de volgende methode te gebruikenw = driver.findElement (By.xpath ("// * [@ type = 'text'] // volgende :: invoer"));// Druk de tekst van het gezochte element afSystem.out.println (w.getText ());// Sluit de browserdriver.quit ();
Preceding: Deze functie retourneert het voorgaande element van het specifieke element.
Hier ziet onze XPath-query eruit als
Xpath = // * [@ type = 'submit'] // voorafgaand aan :: input
XPath met behulp van Preceding
import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.chrome.ChromeDriver;openbare les voorafgaand aan {public static void main (String [] args) {WebDriver-stuurprogramma;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = nieuwe ChromeDriver ();// Start de applicatiedriver.get ("https://www.guru99.com/");// Zoek het element met behulp van de voorgaande methodew = driver.findElement (By.xpath ("// * [@ type = 'submit'] // voorafgaande :: input"));// Druk het gezochte element afSystem.out.println (w.getText ());// Sluit de browserdriver.quit ();
d) Descendant: deze functie retourneert het afstammende element van het specifieke element.
Hier ziet onze XPath-query eruit als
Xpath = // * [@ id = 'rt-feature'] // afstammeling :: a
XPath met behulp van Descendant
import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.chrome.ChromeDriver;openbare klas Descendant {public static void main (String [] args) {WebDriver-stuurprogramma;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = nieuwe ChromeDriver ();// Start de applicatiedriver.get ("https://www.guru99.com/");// Zoek het element met behulp van de afstammingsmethodew = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // afstammeling :: a"));// Druk het gezochte element afSystem.out.println (w.getText ());// Sluit de browserdriver.quit ();
Overzicht
- Er zijn enkele situaties waarin gewone XPath niet kan worden gebruikt om een element te vinden. In zo'n situatie hebben we verschillende functies nodig van de xpath-query.
- Er zijn enkele belangrijke XPath-functies zoals XPath bevat, ouder, voorouders, volgende broer of zus, enz.
- Met behulp van deze functies kunt u complexe XPath-expressies maken.