Wenn ein einfacher XPath kein kompliziertes Webelement für unser Testskript finden kann, müssen wir die Funktionen aus der XPath 1.0-Bibliothek verwenden. Mit der Kombination dieser Funktionen können wir spezifischere XPath erstellen. Lassen Sie uns 3 solcher Funktionen diskutieren -
- Enthält
- Geschwister
- Vorfahr
- Und ODER
- Elternteil
- Beginnt mit
- XPath-Achsen
Lassen Sie uns sie im Detail studieren -
Was enthält () in Selen?
enthält () in Selen ist eine Funktion innerhalb des Xpath-Ausdrucks, mit der nach den Webelementen gesucht wird, die einen bestimmten Text enthalten. Wir können alle Elemente, die mit dem angegebenen Textwert übereinstimmen, mithilfe der XPath-Funktion include () auf der gesamten Webseite extrahieren. Enthält in XPath die Möglichkeit, das Element mit Teiltext zu finden.
Ex. Hier suchen wir einen Anker. Enthält Text als 'SAP M'.
"// h4 / a [enthält (text (), 'SAP M')]"
HINWEIS: Sie können die folgende XPath-Übung unter http://demo.guru99.com/test/selenium-xpath.html üben
Was ist Geschwister in Selenium Webdriver?
Ein Geschwister in Selenium Webdriver ist eine Funktion zum Abrufen eines Webelements, das ein Geschwister des übergeordneten Elements ist. Wenn das übergeordnete Element bekannt ist, kann das Webelement leicht gefunden oder gefunden werden, das das Geschwisterattribut des Xpath-Ausdrucks in Selenium Webdriver verwenden kann.
Geschwister in XPath Beispiel: Hier finden wir auf der Basis des Geschwisterelements 'a' 'h4'
"// div [@ class = 'canvas-graph'] // a [@href = '/ Accounting.html'] [i [@ class = 'icon-usd']] / Following-sibling :: h4"
Vorfahr : Um ein Element auf der Grundlage des übergeordneten Elements zu finden, können wir das Vorgängerattribut von XPath verwenden.
Lassen Sie uns diese 3 Funktionen anhand eines Beispiels verstehen -
Testschritte
Hinweis: Seit dem Erstellungsdatum des Tutorials wurde die Homepage von Guru99 aktualisiert. Verwenden Sie stattdessen die Demo-Site, um Tests auszuführen
- Gehen Sie zu http://demo.guru99.com/test/guru99home/
- Suchen Sie im Abschnitt "Einige unserer beliebtesten Kurse" nach allen Webelementen, die Geschwister eines WebElements sind, dessen Text "SELENIUM" lautet.
- Wir werden Elemente finden, die XPath-Text enthalten, Ahnen- und Geschwisterfunktion enthalten.
VERWENDUNG Enthält und XPath Geschwister
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;öffentliche Klasse SiblingAndParentInXpath {@Prüfungpublic void testSiblingAndParentInXpath () {WebDriver-Treiber;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);Treiber = neuer FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Suchelement in 'Beliebter Kurs', das Geschwister der Kontrolle 'SELENIUM' ist. Hier finden wir zuerst ein h2 mit dem Text '' Einige unserer beliebtesten Kurse '', dann wechseln wir zu seinem übergeordneten Element, das ein 'ist. div ', in diesem div finden wir einen Link, dessen Text' SELENIUM 'ist, dann finden wir endlich alle Geschwisterelemente dieses Links (' SELENIUM ')ListdateBox = driver.findElements (By.xpath ("// h2 [enthält (text (), 'Einige unserer beliebtesten Kurse')] / parent :: div // div [// a [text () = 'SELENIUM']] / folgendes Geschwister :: div [@ class = 'rt-grid-2 rt-omega'] "));// Drucke alle Geschwister des Elements mit dem Namen 'SELENIUM' in 'Beliebter Kurs'.für (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}}driver.close ();}}}}
Die Ausgabe lautet wie folgt:
Vorfahr in Selenium Webdriver
Vorfahr in Selenium Webdriver ist eine Funktion, mit der der Vorfahr eines bestimmten Mitglieds auf der angegebenen Ebene gefunden wird. Die Ebene des zurückzugebenden Vorfahren oder die Ebene des Vorfahren im Verhältnis zur Ebene des Mitglieds kann explizit angegeben werden. Es gibt die Anzahl der hierarchischen Schritte des Vorfahren zurück und sucht den angegebenen Vorfahren, den der Benutzer möchte.
Angenommen, wir müssen alle Elemente im Abschnitt "Beliebter Kurs" mit Hilfe des Vorfahren des Ankers durchsuchen, dessen Text "SELENIUM" lautet.
Hier wird unsere xpath-Abfrage wie folgt aussehen
"//div[.//a[text()='SELENIUM'‹/ancestor::div[@class='rt-grid-2 rt-omega '] / Following-sibling :: div"
Vollständiger Code
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;öffentliche Klasse AncestorInXpath {@Prüfungpublic void testAncestorInXpath () {WebDriver-Treiber = neuer FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Alle Elemente im Abschnitt 'Beliebter Kurs' durchsuchen// mit Hilfe des Vorfahren des Ankers, dessen Text 'SELENIUM' istListdateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / ancestor :: div [@ class = 'rt-grid-2 rt- omega '] / folgendes Geschwister :: div "));// Drucke alle Geschwister des Elements mit dem Namen 'SELENIUM' in 'Beliebter Kurs'.für (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}}driver.quit ();}}}}
Die Ausgabe sieht so aus:
Verwenden von AND und OR
Mit AND und OR können Sie 2 Bedingungen in unseren XPath-Ausdruck einfügen.
- Im Fall von AND sollten beide 2 Bedingungen wahr sein, dann findet nur das Element.
- Im Falle von OR sollte eine der beiden Bedingungen erfüllt sein, dann findet nur das Element.
Hier wird unsere XPath-Abfrage so aussehen
Xpath = // * [@ type = 'submit' OR @ name = 'btnReset']
Xpath = // Eingabe [@ type = 'submit' und @ name = 'btnLogin']
Testschritte:
- Gehen Sie zu http://demo.guru99.com/v1/
- In diesem Abschnitt wird die obige Demo-Site verwendet, um Elemente mit verschiedenen Funktionen von XPath zu suchen.
Sie finden ein Element mit den Achsen AND und OR, Parent, Starts with und XPath
UND ODER Beispiel
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;öffentliche Klasse AND_OR {public static void main (String [] args) {WebDriver-Treiber;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");Treiber = neuer ChromeDriver ();// Anwendung startendriver.get ("https://www.guru99.com/");// Suchelement mit ODER im xpathw = driver.findElement (By.xpath ("// * [@ type = 'submit' OR @ name = 'btnReset']"));// Den Text des Elements druckenSystem.out.println (w.getText ());// Suchelement mit AND im xpathx = driver.findElement (By.xpath ("// input [@ type = 'submit' und @ name = 'btnLogin']"));// Den Text des gesuchten Elements druckenSystem.out.println (x.getText ());// Schließen Sie den Browserdriver.quit ();}}}}
Was ist Eltern in Selen?
Parent in Selenium ist eine Methode zum Abrufen des übergeordneten Knotens des aktuellen Knotens, der auf der Webseite ausgewählt wurde. Dies ist sehr nützlich, wenn Sie ein Element auswählen und das übergeordnete Element mithilfe von Xpath abrufen müssen. Diese Methode wird auch verwendet, um die Eltern des Elternteils abzurufen.
Hier wird unsere XPath-Abfrage so aussehen
Xpath = // * [@ id = 'rt-feature'] // parent :: div
XPath mit Parent
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;öffentliche Klasse Eltern {public static void main (String [] args) {WebDriver-Treiber;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");Treiber = neuer ChromeDriver ();// Anwendung startendriver.get ("https://www.guru99.com/");// Suche das Element mit PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// Den Text des gesuchten Elements druckenSystem.out.println (w.getText ());// Schließen Sie den Browserdriver.quit ();}}}}
Beginnt mit
Mit der Funktion Starts-with können Sie das Element finden, dessen Attribut sich beim Aktualisieren oder bei anderen Vorgängen wie Klicken, Senden usw. dynamisch ändert.
Hier wird unsere XPath-Abfrage so aussehen
Xpath = // label [beginnt mit (@ id, 'message')]
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;öffentliche Klasse StartsWith {public static void main (String [] args) {WebDriver-Treiber;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");Treiber = neuer ChromeDriver ();// Anwendung startendriver.get ("https://www.guru99.com/");// Suche das Element mit begin-withw = driver.findElement (By.xpath ("// label [beginnt mit (@ id, 'message')]"));// Den Text des gesuchten Elements druckenSystem.out.println (w.getText ());// Schließen Sie den Browserdriver.quit ();}}}}
Xpath-Achsen
Mithilfe von XPath-Achsen können Sie die dynamischen und sehr komplexen Elemente auf einer Webseite finden. XPath-Achsen enthalten verschiedene Methoden, um ein Element zu finden. Hier werden einige Methoden besprochen.
Folgendes : Diese Funktion gibt das unmittelbare Element der jeweiligen Komponente zurück.
Hier wird unsere XPath-Abfrage so aussehen
Xpath = // * [@ type = 'text'] // folgende :: Eingabe
XPath mit folgenden
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;öffentliche Klasse Folgende {public static void main (String [] args) {WebDriver-Treiber;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");Treiber = neuer ChromeDriver ();// Anwendung startendriver.get ("https://www.guru99.com/");// Suche das Element mit der folgenden Methodew = driver.findElement (By.xpath ("// * [@ type = 'text'] // folge :: input"));// Den Text des gesuchten Elements druckenSystem.out.println (w.getText ());// Schließen Sie den Browserdriver.quit ();}}}}
Vorheriges: Diese Funktion gibt das vorhergehende Element des jeweiligen Elements zurück.
Hier wird unsere XPath-Abfrage so aussehen
Xpath = // * [@ type = 'submit'] // vor :: input
XPath mit Preceding
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;öffentliche Klasse Vorhergehende {public static void main (String [] args) {WebDriver-Treiber;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");Treiber = neuer ChromeDriver ();// Anwendung startendriver.get ("https://www.guru99.com/");// Suche das Element mit der vorhergehenden Methodew = driver.findElement (By.xpath ("// * [@ type = 'submit'] // vor :: input"));// Das gesuchte Element druckenSystem.out.println (w.getText ());// Schließen Sie den Browserdriver.quit ();}}}}
d) Nachkomme: Diese Funktion gibt das Nachkommenelement des jeweiligen Elements zurück.
Hier wird unsere XPath-Abfrage so aussehen
Xpath = // * [@ id = 'rt-feature'] // Nachkomme :: a
XPath mit Descendant
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;öffentliche Klasse Nachkomme {public static void main (String [] args) {WebDriver-Treiber;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");Treiber = neuer ChromeDriver ();// Anwendung startendriver.get ("https://www.guru99.com/");// Durchsuche das Element mit der Nachkommenmethodew = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // Nachkomme :: a"));// Das gesuchte Element druckenSystem.out.println (w.getText ());// Schließen Sie den Browserdriver.quit ();}}}}
Zusammenfassung
- Es gibt Situationen, in denen reguläres XPath nicht zum Auffinden eines Elements verwendet werden kann. In einer solchen Situation benötigen wir andere Funktionen als die xpath-Abfrage.
- Es gibt einige wichtige XPath-Funktionen wie XPath enthält, Eltern, Vorfahren, folgende Geschwister usw.
- Mit Hilfe dieser Funktionen können Sie komplexe XPath-Ausdrücke erstellen.