XPath Innehåller: Text, Följa syskon och Ancestor in Selenium

🚀 Smart sammanfattning

XPath innehåller, Sibling och Ancestor i Selenium möjliggör exakt identifiering av webbelement med hjälp av strukturerade relationer och textmönster. Dessa XPath-funktioner förbättrar automatiseringens tillförlitlighet, flexibilitet och underhållbarhet i komplexa DOM-hierarkier.

  • Använda contains() för att lokalisera dynamiska element med ofullständig text, vilket förbättrar robustheten mot textvariationer.
  • Ansök following-sibling och ancestor att effektivt och existera genom elementhierarkiertract-relaterade noder.
  • Kombinera funktioner med logiska operatorer (OCH, ELLER) för förfinad och exakt elementinriktning.
  • Använd XPath-axlar (föregående, underordnade) för att systematiskt navigera i komplexa DOM-träd.
  • Integrera dessa uttryck i Selenium skript för underhållbar, dynamisk och robust automatisering av webbtester.

XPath Innehåller

Vad innehåller XPath?

XPath innehåller är en funktion inom ett XPath-uttryck, som används för att söka efter webbelement som innehåller en viss text. Vi kan t.ex.tracsöker efter alla element som matchar det givna textvärdet med hjälp av XPaths funktionen contains() på hela webbsidan. Contains i XPath har möjlighet att hitta elementet med ofullständig text.

Exempel – innehåller text

Här söker vi ett ankare .innehåller text som 'SAP M'.

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

XPath Innehåller

OBS: Du kan träna följande XPath-övning på detta https://demo.guru99.com/test/selenium-xpath.html

Om en enkel XPath inte kan hitta ett komplicerat webbelement för vårt testskript, behöver vi använda funktionerna från XPath 1.0-biblioteket. Med kombinationen av dessa funktioner kan vi skapa ett mer specifikt XPath.

👉 Registrera dig för gratis livesändning Selenium Testprojekt

Följer syskon i XPath

A Syskon in Selenium Webdriver är en funktion som används för att hämta ett webbelement som är ett syskon till föräldraelementet. Om föräldraelementet är känt kan webbelementet enkelt hittas eller lokaliseras, vilket kan använda sibling-attributet i XPath-uttrycket i Selenium WebDriver.

Syskon i XPath Exempel:
Här, baserat på syskonelementet i 'a', hittar vi 'h4'

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

Följer syskon i XPath

FörfaderFör att hitta ett element baserat på föräldraelementet kan vi använda ancestor-attributet i XPath.

Följer syskon i XPath

Låt oss förstå dessa tre funktioner med hjälp av ett exempel –

Teststeg:

Obs: Sedan handledningen skapades, har hemsidan för Guru99 har uppdaterats, så använd demosida istället för att köra tester

  1. Gå till https://demo.guru99.com/test/guru99home/
  2. I avsnittet "Några av våra mest populära kurser", sök efter alla webbelement som är syskon till ett webbelement vars text är "SELENIUM".
  3. Vi kommer att hitta element med hjälp av XPaths text innehåller, förfader och syskonfunktioner.

Följer syskon i XPath

ANVÄNDA Innehåller text och XPath-syskon

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

Utgången blir så här:

ANVÄNDA Innehåller text och XPath-syskon

XPath Ancestor in Selenium

XPath Ancestor in Selenium är en funktion som används för att hitta förfadern till ett specifikt element på det angivna lagret. Nivån på förfadern som ska returneras eller nivån på förfadern i förhållande till medlemmens nivå kan anges explicit. Den returnerar antalet hierarkiska steg från förfadern och lokaliserar den angivna förfader som användaren vill ha.

Anta nu att vi behöver söka i alla element i avsnittet "Populär kurs" med hjälp av ankarets förfader vars text är "SELENIUM".

Här kommer vår xpath-fråga att se ut

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

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

Utdata kommer att se ut som-

Komplett Code

Använder AND och OR

Genom att använda AND och OR kan du lägga till två villkor i vårt XPath-uttryck.

  • I fallet AND bör båda villkoren vara sanna, endast då hittar den elementet.
  • I fallet ELLER, om något av de två villkoren är sant, endast då hittar den elementet.

Här kommer vår XPath-fråga att se ut som

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

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

Använder AND och OR

Teststeg:

  1. Gå till https://demo.guru99.com/v1/
  2. I det här avsnittet kommer vi att använda demosida ovan för att söka efter element med olika funktioner i XPath.

Du hittar ett element som använder AND och OR, parent, starts-with och XPath-axlar

OCH ELLER Exempel

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-förälder i Selenium

Förälder i Selenium är en metod som används för att hämta föräldranoden för den nod som är vald på webbsidan. Den är mycket användbar i situationer där du väljer ett element och behöver hämta föräldraelementet med hjälp av XPath. Den här metoden används också för att hämta förälderns föräldranod.

Här kommer vår XPath-fråga att se ut som

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

XPath-förälder i Selenium

XPath använder förälder

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

Börjar med

Med hjälp av funktionen Starts-with kan du hitta det element vars attribut ändras dynamiskt vid uppdatering eller andra åtgärder som klick, skicka osv.

Här kommer vår XPath-fråga att se ut

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

Börjar med

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

Xpath axlar

Genom att använda XPath-axlar kan du hitta de dynamiska och mycket komplexa elementen på en webbsida. XPath-axlar innehåller flera metoder för att hitta ett element. Här kommer att diskutera några metoder.

efter: Den här funktionen returnerar det omedelbara elementet för den specifika komponenten.

Här kommer vår XPath-fråga att se ut

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

XPath använder Följande
XPath använder följande
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();
	}
}

Föregående: Denna funktion kommer att returnera det föregående elementet i det specifika elementet.

Här kommer vår XPath-fråga att se ut

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

XPath med hjälp av Preceding

XPath med hjälp av 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) Nedåtgående: Denna funktion kommer att returnera det underordnade elementet för det specifika elementet.

Här kommer vår XPath-fråga att se ut

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

XPath använder Descendant

XPath använder 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();
	}
}

Vanliga frågor

I XPath väljer /* alla element på rotnivå i ett XML- eller HTML-dokument. Det betyder "välj valfritt element direkt under rotnoden". Till exempel, i ett HTML-dokument skulle /* matcha eftersom det är elementet på översta nivån under roten.

Funktionen contains() i XPath hjälper till att hitta element vars attribut eller text delvis matchar ett givet värde. Den är särskilt användbar när den exakta strängen är oförutsägbar eller dynamisk. Till exempel, //div[contains(@class,'menu')] matchar vilken som helst vars klass innehåller ordet ”meny”.

För att hitta element baserat på en partiell matchning inom deras klassattribut, använd funktionen contains(). Till exempel, //button[contains(@class,'submit')] riktar sig mot alla med ett klassnamn som innehåller "submit", till exempel "submit-btn" eller "form-submit". Det är ett flexibelt sätt att hantera dynamiska klassnamn.

Sammanfatta detta inlägg med: