XPath Contains, Following Sibling, Antenato e amp; Selenio E / O

Sommario:

Anonim

Se un semplice XPath non è in grado di trovare un elemento web complicato per il nostro script di test, dobbiamo utilizzare le funzioni della libreria XPath 1.0. Con la combinazione di queste funzioni, possiamo creare XPath più specifici. Parliamo di 3 di queste funzioni:

  1. Contiene
  2. Fratello
  3. Antenato
  4. E OR
  5. Genitore
  6. Inizia con
  7. Asce XPath

Studiamoli in dettaglio -

Cosa contiene contiene () nel selenio?

contiene () in Selenium è una funzione all'interno dell'espressione Xpath che viene utilizzata per cercare gli elementi web che contengono un particolare testo. Possiamo estrarre tutti gli elementi che corrispondono al valore di testo specificato utilizzando la funzione XPath contains () in tutta la pagina web. Contiene in XPath ha la capacità di trovare l'elemento con testo parziale.

Ex. Qui stiamo cercando un'ancora. Contiene testo come "SAP M".

"// h4 / a [contiene (text (), 'SAP M')]"

NOTA: puoi esercitarti nel seguente esercizio XPath su questo http://demo.guru99.com/test/selenium-xpath.html

Cos'è il fratello in Selenium Webdriver?

Un fratello in Selenium Webdriver è una funzione utilizzata per recuperare un elemento web che è un fratello dell'elemento genitore. Se l'elemento genitore è noto, l'elemento web può essere facilmente trovato o individuato utilizzando l'attributo di pari livello dell'espressione Xpath in selenium webdriver.

Fratello in XPath Esempio: qui sulla base dell'elemento fratello di 'a' troviamo 'h4'

"// div [@ class = 'canvas- graph'] // a [@href = '/ accounting.html'] [i [@ class = 'icon-usd']] / following-sibling :: h4"

Antenato : per trovare un elemento sulla base dell'elemento padre possiamo utilizzare l'attributo antenato di XPath.

Comprendiamo queste 3 funzioni usando un esempio:

Passaggi del test

Nota: dalla data di creazione del tutorial, la home page di Guru99 è stata aggiornata, quindi usa il sito demo per eseguire i test

  1. Vai a http://demo.guru99.com/test/guru99home/
  2. Nella sezione "Alcuni dei nostri corsi più popolari", cerca tutti gli elementi Web che sono fratelli di un WebElement il cui testo è "SELENIO"
  3. Troveremo l'elemento utilizzando il testo XPath contiene, antenato e funzione di pari livello.

UTILIZZO Contiene e XPath Sibling

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;classe pubblica SiblingAndParentInXpath {@Testpublic void testSiblingAndParentInXpath () {Driver WebDriver;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);driver = nuovo FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Cerca l'elemento all'interno di 'Corso popolare' che è fratello del controllo 'SELENIO', qui prima troveremo un h2 il cui testo è '' Alcuni dei nostri corsi più popolari ', quindi passiamo al suo elemento genitore che è un' div ', all'interno di questo div troveremo un link il cui testo è' SELENIO 'poi finalmente troveremo tutti gli elementi fratelli di questo link (' SELENIO ')List  dateBox = driver.findElements (By.xpath ("// h2 [contains (text (), 'A few of our most popular course')] / parent :: div // div [// a [text () = 'SELENIO']] / following-sibling :: div [@ class = 'rt-grid-2 rt-omega'] "));// Stampa tutti i fratelli dell'elemento denominato "SELENIO" in "Corso popolare"per (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.close ();}}

L'output sarà come:

Antenato in Selenium Webdriver

Ancestor in Selenium Webdriver è una funzione utilizzata per trovare l'antenato di un membro specifico al livello specificato. Il livello dell'antenato da restituire o il livello dell'antenato relativo al livello del membro può essere specificato esplicitamente. Restituisce il numero di passaggi gerarchici dall'antenato, individuando l'antenato specificato che l'utente desidera.

Supponiamo ora di dover cercare in tutti gli elementi nella sezione "Corso popolare" con l'aiuto dell'antenato dell'ancora il cui testo è "SELENIO"

Qui la nostra query xpath sarà come

"//div[.//a[text()='SELENIUM'””/ancestor::div[@class='rt-grid-2 rt-omega '] / following-sibling :: div"

Codice completo

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 {@Testpublic void testAncestorInXpath () {Driver WebDriver = nuovo FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Cerca tutti gli elementi nella sezione "Corso popolare"// con l'aiuto dell'antenato dell'ancora il cui testo è "SELENIO"List  dateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / ancestor :: div [@ class = 'rt-grid-2 rt- omega '] / following-sibling :: div "));// Stampa tutti i fratelli dell'elemento denominato "SELENIO" in "Corso popolare"per (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}

L'output sarà simile a:

Utilizzando AND e OR

Usando AND e OR puoi inserire 2 condizioni nella nostra espressione XPath.

  • In caso di AND entrambe le 2 condizioni dovrebbero essere vere, solo allora trova l'elemento.
  • In caso di OR una qualsiasi delle 2 condizioni dovrebbe essere vera, solo allora trova l'elemento.

Qui la nostra query XPath sarà come

Xpath = // * [@ type = 'submit' OR @ name = 'btnReset']
Xpath = // input [@ type = 'submit' and @ name = 'btnLogin']

Passaggi del test:

  1. Vai a http://demo.guru99.com/v1/
  2. Nella sezione, utilizzerà il sito demo sopra per cercare elementi con diverse funzioni di XPath.

Troverai un elemento che utilizza AND e OR, gli assi padre, inizia con e XPath

AND OR Esempio

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;classe pubblica AND_OR {public static void main (String [] args) {Driver WebDriver;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = nuovo ChromeDriver ();// Avvia l'applicazionedriver.get ("https://www.guru99.com/");// Cerca l'elemento utilizzando OR in xpathw = driver.findElement (By.xpath ("// * [@ type = 'submit' OR @ name = 'btnReset']"));// Stampa il testo dell'elementoSystem.out.println (w.getText ());// Cerca l'elemento utilizzando AND in xpathx = driver.findElement (By.xpath ("// input [@ type = 'submit' and @ name = 'btnLogin']"));// Stampa il testo dell'elemento cercatoSystem.out.println (x.getText ());// Chiude il browserdriver.quit ();}}

Qual è il genitore nel selenio?

Parent in Selenium è un metodo utilizzato per recuperare il nodo padre del nodo corrente selezionato nella pagina web. È molto utile nella situazione in cui si seleziona un elemento e si necessita di ottenere l'elemento genitore utilizzando Xpath. Questo metodo viene utilizzato anche per ottenere il genitore del genitore.

Qui la nostra query XPath sarà come

Xpath = // * [@ id = 'rt-feature'] // parent :: div

XPath utilizzando Parent

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) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = nuovo ChromeDriver ();// Avvia l'applicazionedriver.get ("https://www.guru99.com/");// Cerca l'elemento utilizzando PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// Stampa il testo dell'elemento cercatoSystem.out.println (w.getText ());// Chiude il browserdriver.quit ();}}

Inizia con

Utilizzando la funzione Inizia con, puoi trovare l'elemento il cui attributo cambia dinamicamente all'aggiornamento o ad altre operazioni come clic, invia, ecc.

Qui la nostra query XPath sarà come

Xpath = // label [inizia con (@ id, "messaggio")]

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) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = nuovo ChromeDriver ();// Avvia l'applicazionedriver.get ("https://www.guru99.com/");// Cerca l'elemento utilizzando inizia conw = driver.findElement (By.xpath ("// label [starts-with (@ id, 'message')]"));// Stampa il testo dell'elemento cercatoSystem.out.println (w.getText ());// Chiude il browserdriver.quit ();}}

Assi Xpath

Utilizzando gli assi XPath, puoi trovare gli elementi dinamici e molto complessi su una pagina web. Gli assi XPath contengono diversi metodi per trovare un elemento. Qui, discuterà alcuni metodi.

seguente : Questa funzione restituirà l'elemento immediato del particolare componente.

Qui la nostra query XPath sarà come

Xpath = // * [@ type = 'text'] // following :: input

XPath utilizzando quanto segue

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;corso pubblico che segui {public static void main (String [] args) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = nuovo ChromeDriver ();// Avvia l'applicazionedriver.get ("https://www.guru99.com/");// Cerca l'elemento utilizzando il metodo Followingw = driver.findElement (By.xpath ("// * [@ type = 'text'] // following :: input"));// Stampa il testo dell'elemento cercatoSystem.out.println (w.getText ());// Chiude il browserdriver.quit ();}}

Precedente: questa funzione restituirà l'elemento precedente dell'elemento particolare.

Qui la nostra query XPath sarà come

Xpath = // * [@ type = 'submit'] // preceding :: input

XPath utilizzando Preceding

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) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = nuovo ChromeDriver ();// Avvia l'applicazionedriver.get ("https://www.guru99.com/");// Cerca l'elemento utilizzando il metodo precedentew = driver.findElement (By.xpath ("// * [@ type = 'submit'] // preceding :: input"));// Stampa l'elemento cercatoSystem.out.println (w.getText ());// Chiude il browserdriver.quit ();}}

d) Discendente: questa funzione restituirà l'elemento discendente dell'elemento particolare.

Qui la nostra query XPath sarà come

Xpath = // * [@ id = 'rt-feature'] // discendente :: a

XPath utilizzando Descendant

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) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = nuovo ChromeDriver ();// Avvia l'applicazionedriver.get ("https://www.guru99.com/");// Cerca l'elemento utilizzando il metodo discendentew = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // descendant :: a"));// Stampa l'elemento cercatoSystem.out.println (w.getText ());// Chiude il browserdriver.quit ();}}

Sommario

  • Ci sono alcune situazioni in cui non è possibile utilizzare XPath normale per trovare un elemento. In tale situazione, abbiamo bisogno di funzioni diverse dalla query xpath.
  • Esistono alcune importanti funzioni XPath come XPath contiene, genitore, antenati, fratello successivo, ecc.
  • Con l'aiuto di queste funzioni, puoi creare espressioni XPath complesse.