XPath obsahuje: text, následování sourozence a předka Selenium

🚀 Chytré shrnutí

XPath obsahuje, sourozence a předka v Selenium umožňují přesnou identifikaci webových prvků pomocí strukturovaných vztahů a textových vzorů. Tyto funkce XPath zvyšují spolehlivost, flexibilitu a udržovatelnost automatizace ve složitých hierarchiích DOM.

  • Použijte contains() k vyhledání dynamických prvků s částečným textem, čímž se zlepšuje odolnost vůči textovým variantám.
  • Přihláška following-sibling a ancestor efektivně a ex procházet hierarchiemi prvkůtracsouvisející uzly.
  • Kombinujte funkce s logickými operátory (AND, OR) pro přesnější a přesnější zacílení na prvky.
  • Využijte osy XPath (předchozí, potomek) k systematické navigaci ve složitých stromech DOM.
  • Integrujte tyto výrazy do Selenium skripty pro udržovatelnou, dynamickou a odolnou automatizaci webového testování.

XPath obsahuje

Co obsahuje XPath?

XPath obsahuje je funkce v rámci výrazu XPath, která se používá k vyhledávání webových prvků obsahujících konkrétní text. Můžeme napříkladtracVyhledejte všechny prvky, které odpovídají zadané textové hodnotě, pomocí funkce XPath contains() na celé webové stránce. Funkce Contains v XPath umožňuje najít prvek s částečným textem.

Příklad – obsahuje text

Zde hledáme kotvu .obsahuje text jako „SAP M'.

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

XPath obsahuje

POZNÁMKA: Na tomto si můžete procvičit následující cvičení XPath https://demo.guru99.com/test/selenium-xpath.html

Pokud jednoduchý XPath není schopen najít složitý webový element pro náš testovací skript, musíme použít funkce z knihovny XPath 1.0. Kombinací těchto funkcí můžeme vytvořit specifičtější XPath.

👉 Zaregistrujte se pro živé vysílání zdarma Selenium Testovací projekt

Sledování sourozence v XPath

A Sourozenec v Selenium Webdriver je funkce používaná k načtení webového elementu, který je sourozencem nadřazeného elementu. Pokud je nadřazený element známý, pak lze webový element snadno najít nebo lokalizovat, k čemuž lze použít atribut sibling výrazu XPath v Selenium WebDriver.

Sourozenec v XPath Příklad:
Zde na základě sourozeneckého prvku 'a' nacházíme 'h4'.

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

Sledování sourozence v XPath

PředekPro nalezení prvku na základě nadřazeného prvku můžeme použít atribut ancestry v XPath.

Sledování sourozence v XPath

Pojďme si tyto 3 funkce vysvětlit na příkladu –

Testovací kroky:

Poznámka: Od data vytvoření tutoriálu je domovská stránka GuruVerze 99 byla aktualizována, proto k provedení testů použijte raději demo stránku.

  1. Přejít https://demo.guru99.com/test/guru99home/
  2. V sekci „Několik našich nejoblíbenějších kurzů“ vyhledejte všechny webové prvky, které jsou sourozenci webového prvku, jehož text je „SELENIUM“.
  3. Prvky najdeme pomocí funkcí XPath text contains, ancestor a sibling.

Sledování sourozence v XPath

POUŽÍVÁNÍ Obsahuje Text a XPath Sourozence

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

Výstup bude takový:

POUŽÍVÁNÍ Obsahuje Text a XPath Sourozence

Předek XPath v Selenium

Předek XPath v Selenium je funkce používaná k nalezení předka specifického prvku na zadané vrstvě. Lze explicitně zadat úroveň předka, která má být vrácena, nebo úroveň předka vzhledem k úrovni členu. Vrací počet hierarchických kroků od předka a vyhledává zadaného předka, kterého uživatel hledá.

Předpokládejme, že nyní potřebujeme prohledat všechny prvky v sekci „Oblíbený kurz“ s pomocí předka kotvy, jehož text je „SELENIUM“.

Zde bude vypadat náš dotaz xpath

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

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

Výstup bude vypadat -

Kompletní Code

Pomocí AND a OR

Pomocí operátorů AND a OR můžete do našeho výrazu XPath vložit 2 podmínky.

  • V případě operace AND musí být splněny obě podmínky, teprve poté se prvek najde.
  • V případě operace OR musí být splněna kterákoli ze dvou podmínek, pouze tehdy se prvek najde.

Zde bude náš XPath dotaz vypadat takto

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

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

Pomocí AND a OR

Testovací kroky:

  1. Přejít https://demo.guru99.com/v1/
  2. V této části použijeme výše uvedený demo web k vyhledávání prvků s různými funkcemi XPath.

Prvek najdete pomocí AND a OR, rodičovské osy, os začíná s a XPath

A NEBO Příklad

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

}

Parent XPath v Selenium

Rodič v Selenium je metoda používaná k načtení nadřazeného uzlu aktuálně vybraného uzlu na webové stránce. Je velmi užitečná v situacích, kdy vyberete prvek a potřebujete získat nadřazený prvek pomocí XPath. Tato metoda se také používá k získání nadřazeného uzlu nadřazeného prvku.

Zde bude náš XPath dotaz vypadat takto

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

Parent XPath v Selenium

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

Začíná s

Pomocí funkce Starts-with můžete najít element, jehož atribut se dynamicky mění při aktualizaci nebo jiných operacích, jako je kliknutí, odeslání atd.

Zde bude vypadat náš dotaz XPath

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

Začíná s

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

osy Xpath

Pomocí os XPath můžete na webové stránce najít dynamické a velmi složité prvky. Osy XPath obsahují několik metod k nalezení prvku. Zde budeme diskutovat o několika metodách.

následující: Tato funkce vrátí okamžitý prvek konkrétní komponenty.

Zde bude vypadat náš dotaz XPath

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

XPath pomocí následujícího
XPath pomocí následujícího
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();
	}
}

Předchozí: Tato funkce vrátí předchozí prvek konkrétního prvku.

Zde bude vypadat náš dotaz XPath

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

XPath pomocí předchozí

XPath pomocí předchozí
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) Klesající: Tato funkce vrátí potomek prvku konkrétního prvku.

Zde bude vypadat náš dotaz XPath

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

XPath pomocí Descendant

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

Nejčastější dotazy

V XPath vybere /* všechny elementy kořenového uzlu XML nebo HTML dokumentu. To znamená „vybrat jakýkoli element přímo pod kořenovým uzlem“. Například v HTML dokumentu by /* odpovídalo protože je to prvek nejvyšší úrovně pod kořenem.

Funkce contains() v XPath pomáhá najít prvky, jejichž atribut nebo text částečně odpovídá dané hodnotě. Je obzvláště užitečná, když je přesný řetězec nepředvídatelný nebo dynamický. Například //div[contains(@class,'menu')] shoduje se s jakýmkoli jehož třída zahrnuje slovo „menu“.

Pro vyhledání prvků na základě částečné shody v rámci jejich atributu třídy použijte funkci contains(). Například //button[contains(@class,'submit')] cílí na jakoukoli třídu s názvem, která obsahuje „submit“, například „submit-tn“ nebo „form-submit“. Je to flexibilní způsob, jak zpracovávat dynamické názvy tříd.

Shrňte tento příspěvek takto: