XPath conține: text, următorul frate și strămoș în Selenium

🚀 Rezumat inteligent

XPath conține, rudă și strămoș în Selenium permit identificarea precisă a elementelor web folosind relații structurate și modele de text. Aceste funcții XPath îmbunătățesc fiabilitatea, flexibilitatea și mentenabilitatea automatizării în ierarhii DOM complexe.

  • Utilizare contains() pentru a localiza elemente dinamice cu text parțial, îmbunătățind robustețea împotriva variațiilor de text.
  • Aplică following-sibling și ancestor să traverseze ierarhiile de elemente eficient și extract noduri conexe.
  • Combinați funcțiile cu operatori logici (ȘI, SAU) pentru o direcționare rafinată și precisă a elementelor.
  • Folosește axele XPath (precedente, descendente) pentru a naviga sistematic prin arbori DOM complecși.
  • Integrați aceste expresii în Selenium scripturi pentru automatizarea testelor web ușor de întreținut, dinamice și rezistente.

XPath Conține

Ce este XPath Contains?

XPath conține este o funcție în cadrul unei expresii XPath, care este utilizată pentru a căuta elementele web care conțin un anumit text. Putem extractoate elementele care corespund valorii text date folosind funcția XPath contains() în întreaga pagină web. Funcția Contains din XPath are capacitatea de a găsi elementul cu text parțial.

Exemplu – conține text

Aici căutăm o ancoră .contains text ca „SAP M'.

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

XPath Conține

NOTĂ: Puteți exersa următorul exercițiu XPath în acest sens https://demo.guru99.com/test/selenium-xpath.html

Dacă un simplu XPath Dacă nu reușește să găsească un element web complicat pentru scriptul nostru de testare, trebuie să folosim funcțiile din biblioteca XPath 1.0. Prin combinarea acestor funcții, putem crea un XPath mai specific.

👉 Înscrie-te pentru Live Gratuit Selenium Proiect de testare

Urmărirea fratelui în XPath

A Frate înăuntru Selenium Webdriver este o funcție utilizată pentru a prelua un element web care este rudă cu elementul părinte. Dacă elementul părinte este cunoscut, atunci elementul web poate fi găsit sau localizat cu ușurință, ceea ce poate utiliza atributul rudă al expresiei XPath din Selenium WebDriver.

Frate în XPath Exemplu:
Aici, pe baza elementului frate al lui „a”, găsim „h4”

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

Urmărirea fratelui în XPath

StrămoşPentru a găsi un element pe baza elementului părinte, putem folosi atributul ancester al XPath.

Urmărirea fratelui în XPath

Să înțelegem aceste 3 funcții folosind un exemplu –

Pașii de testare:

Notă: De la data creării tutorialului, pagina principală a GuruVersiunea 99 a fost actualizată, așa că folosiți site-ul demo pentru a rula teste.

  1. Accesează https://demo.guru99.com/test/guru99home/
  2. În secțiunea „Câteva dintre cele mai populare cursuri ale noastre”, căutați toate elementele web care sunt rude ale unui element web al cărui text este „SELENIUM”.
  3. Vom găsi elemente folosind funcțiile XPath de tip „contains”, „ancester” și „sibling”.

Urmărirea fratelui în XPath

UTILIZARE Conține text și XPath Frate

import java.time.Duration;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.annotations.Test;

// If you prefer WebDriverManager (optional):
// import io.github.bonigarcia.wdm.WebDriverManager;

public class SiblingAndParentInXpath_Chrome {
    @Test
    public void testSiblingAndParentInXpath() {

        // === Option A: Use local ChromeDriver binary path ===
        // Update this path to your chromedriver location:
        System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");

        // === Option B: Use WebDriverManager (uncomment next line and remove Option A lines) ===
        // WebDriverManager.chromedriver().setup();

        ChromeOptions options = new ChromeOptions();
        // Add any flags you need, e.g. headless:
        // options.addArguments("--headless=new");

        WebDriver driver = new ChromeDriver(options);
        try {

            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
            driver.manage().window().maximize();
            driver.get("https://demo.guru99.com/test/guru99home/");

            // Find all siblings (divs) next to the 'SELENIUM' tile within
            // the "A few of our most popular courses" section.
            // Steps encoded in XPath:
            // 1) Locate the H2 that contains the section title
            // 2) Move to its parent DIV
            // 3) Inside it, locate the link with text 'SELENIUM'
            // 4) From the SELENIUM tile's parent DIV, get following sibling tiles

            List<WebElement> dateBox = driver.findElements(By.xpath(
                "//h2[contains(., 'A few of our most popular courses')]/parent::div" +
                "//a[normalize-space(.)='SELENIUM']/parent::div" +
                "/following-sibling::div[contains(@class,'rt-grid-2')]"
            ));

            // Print the text of each sibling element
            for (WebElement el : dateBox) {
                System.out.println(el.getText());
            }

        } finally {
            driver.quit();
        }
    }
}

Ieșirea va fi ca:

UTILIZARE Conține text și XPath Frate

XPath Ancestor în Selenium

XPath Ancestor în Selenium este o funcție utilizată pentru a găsi strămoșul unui anumit element la stratul specificat. Nivelul strămoșului care va fi returnat sau nivelul strămoșului relativ la nivelul membrului poate fi specificat explicit. Returnează numărul de pași ierarhici de la strămoș, localizând strămoșul specificat dorit de utilizator.

Acum, să presupunem că trebuie să căutăm toate elementele din secțiunea „Curs popular” cu ajutorul strămoșului ancorei al cărei text este „SELENIU”.

Aici interogarea noastră xpath va fi ca

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

Completa Code

import java.time.Duration;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.annotations.Test;

public class AncestorInXpath_Chrome {

@Test

    public void testAncestorInXpath() {

        // Set path to your ChromeDriver executable
        System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");

        ChromeOptions options = new ChromeOptions();
        WebDriver driver = new ChromeDriver(options);

        try {

            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
            driver.manage().window().maximize();
            driver.get("https://demo.guru99.com/test/guru99home/");

            // Search all elements in 'Popular course' section 
            // using the ancestor of the 'SELENIUM' link

            List <WebElement> dateBox = driver.findElements(
                By.xpath("//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div")
            );

            // Print all sibling elements of the 'SELENIUM' tile

            for (WebElement element : dateBox) {
                System.out.println(element.getText());
            }

        } finally {
            driver.quit();
        }
    }
}

Ieșirea va arăta ca...

Completa Code

Folosind AND și SAU

Folosind AND și OR, puteți pune 2 condiții în expresia noastră XPath.

  • În cazul operației AND, ambele condiții ar trebui să fie adevărate, numai atunci găsește elementul.
  • În cazul operației SAU, oricare dintre cele 2 condiții trebuie să fie adevărată, numai atunci găsește elementul.

Aici, interogarea noastră XPath va fi de genul:

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

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

Folosind AND și SAU

Pașii de testare:

  1. Accesează https://demo.guru99.com/v1/
  2. În această secțiune, vom folosi site-ul demonstrativ de mai sus pentru a căuta elemente cu diferite funcții XPath.

Veți găsi un element folosind axele AND și SAU, părinte, începe cu și XPath

ȘI SAU Exemplu

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 Parent în Selenium

Părinte în Selenium este o metodă utilizată pentru a recupera nodul părinte al nodului curent selectat în pagina web. Este foarte utilă în situațiile în care selectați un element și trebuie să obțineți elementul părinte folosind XPath. Această metodă este utilizată și pentru a obține părintele nodului părinte.

Aici, interogarea noastră XPath va fi de genul:

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

XPath Parent în Selenium

XPath folosind 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) {
		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();
	}
}

Incepe cu

Folosind funcția Starts-with, puteți găsi elementul al cărui atribut se modifică dinamic la reîmprospătare sau la alte operațiuni precum clic, trimitere etc.

Aici interogarea noastră XPath va fi ca

Xpath=//label[starts-with(@id,'message')]

Incepe cu

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();
	}
}

Axele Xpath

Folosind axele XPath, puteți găsi elementele dinamice și foarte complexe pe o pagină web. Axele XPath conțin mai multe metode de a găsi un element. Aici, vom discuta câteva metode.

următor: Această funcție va returna elementul imediat al componentei particulare.

Aici interogarea noastră XPath va fi ca

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

XPath utilizând Urmărirea
XPath folosind următoarele
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();
	}
}

Precedent: Această funcție va returna elementul precedent al elementului particular.

Aici interogarea noastră XPath va fi ca

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

XPath folosind Preceding

XPath folosind 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) {
		
		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) Descendentă: Această funcție va returna elementul descendent al unui anumit element.

Aici interogarea noastră XPath va fi ca

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

XPath folosind Descendant

XPath folosind 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) {
		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();
	}
}

Întrebări frecvente

În XPath, /* selectează toate elementele de nivel rădăcină ale unui document XML sau HTML. Înseamnă „selectați orice element direct sub nodul rădăcină”. De exemplu, într-un document HTML, /* ar corespunde deoarece este elementul de nivel superior sub rădăcină.

Funcția contains() din XPath ajută la localizarea elementelor al căror atribut sau text se potrivește parțial cu o anumită valoare. Este utilă în special atunci când șirul exact este imprevizibil sau dinamic. De exemplu, //div[contains(@class,'menu')] se potrivește cu orice a cărui clasă include cuvântul „meniu”.

Pentru a localiza elemente pe baza unei potriviri parțiale în atributul lor de clasă, utilizați funcția contains(). De exemplu, //button[contains(@class,'submit')] vizează orice element cu un nume de clasă care include „submit”, cum ar fi „submit-btn” sau „form-submit”. Este o modalitate flexibilă de a gestiona numele dinamice ale claselor.

Rezumați această postare cu: