XPath Indeholder: Tekst, Følge søskende og forfader i Selenium

🚀 Smart opsummering

XPath indeholder, søskende og forfader i Selenium muliggør præcis identifikation af webelementer ved hjælp af strukturerede relationer og tekstmønstre. Disse XPath-funktioner forbedrer automatiseringens pålidelighed, fleksibilitet og vedligeholdelse i komplekse DOM-hierarkier.

  • Brug contains() at finde dynamiske elementer med delvis tekst, hvilket forbedrer robustheden mod tekstvariationer.
  • Ansøg following-sibling og ancestor at gennemgå elementhierarkier effektivt og extract-relaterede noder.
  • Kombinér funktioner med logiske operatorer (OG, ELLER) for at opnå raffineret og præcis elementmålretning.
  • Udnyt XPath-akser (foregående, efterkommere) til systematisk at navigere i komplekse DOM-træer.
  • Integrer disse udtryk i Selenium scripts til vedligeholdelig, dynamisk og robust webtestautomatisering.

XPath indeholder

Hvad er XPath Indeholder?

XPath indeholder er en funktion i et XPath-udtryk, som bruges til at søge efter webelementer, der indeholder en bestemt tekst. Vi kan f.eks.tracFind alle elementer, der matcher den givne tekstværdi, ved hjælp af XPaths contains()-funktion på tværs af websiden. Contains i XPath har mulighed for at finde elementet med delvis tekst.

Eksempel – indeholder tekst

Her søger vi et anker .indeholder tekst som 'SAP M'.

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

XPath indeholder

BEMÆRK: Du kan øve følgende XPath-øvelse på dette https://demo.guru99.com/test/selenium-xpath.html

Hvis en simpel XPath ikke kan finde et kompliceret webelement til vores testscript, skal vi bruge funktionerne fra XPath 1.0-biblioteket. Med kombinationen af ​​disse funktioner kan vi oprette et mere specifikt XPath.

👉 Tilmeld dig gratis live Selenium Test projekt

Følger søskende i XPath

A Søskende i Selenium Webdriver er en funktion, der bruges til at hente et webelement, der er en søskende til det overordnede element. Hvis det overordnede element er kendt, kan webelementet nemt findes eller lokaliseres ved hjælp af sibling-attributten i XPath-udtrykket i Selenium WebDriver.

Søskende i XPath Eksempel:
Her finder vi 'h4' på baggrund af søskendeelementet i 'a'

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

Følger søskende i XPath

ForfaderFor at finde et element på basis af det overordnede element, kan vi bruge ancestor-attributten i XPath.

Følger søskende i XPath

Lad os forstå disse 3 funktioner ved hjælp af et eksempel –

Testtrin:

Bemærk: Siden datoen for oprettelsen af ​​tutorialen, hjemmesiden for Guru99 er blevet opdateret, så brug demosiden i stedet til at køre tests

  1. Gå til https://demo.guru99.com/test/guru99home/
  2. I sektionen 'Et par af vores mest populære kurser' skal du søge efter alle webelementer, der er søskende til et webelement, hvis tekst er 'SELENIUM'.
  3. Vi finder elementer ved hjælp af XPaths tekst indeholder, forfader og sibling-funktioner.

Følger søskende i XPath

BRUG Indeholder tekst og XPath-søskende

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

Output vil være som:

BRUG Indeholder tekst og XPath-søskende

XPath Ancestor i Selenium

XPath Ancestor i Selenium er en funktion, der bruges til at finde forfaderen til et specifikt element på det angivne lag. Niveauet af forfaderen, der skal returneres, eller niveauet af forfaderen i forhold til medlemmets niveau, kan specificeres eksplicit. Den returnerer antallet af hierarkiske trin fra forfaderen og lokaliserer den angivne forfader, som brugeren ønsker.

Lad os nu antage, at vi skal søge i alle elementer i afsnittet 'Populært kursus' ved hjælp af forgængeren til ankeret, hvis tekst er 'SELENIUM'.

Her vil vores xpath-forespørgsel være sådan

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

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

Output vil se ud -

Komplet Code

Brug AND og OR

Ved at bruge AND og OR kan du indsætte to betingelser i vores XPath-udtryk.

  • I tilfælde af AND, skal begge betingelser være sande, kun så finder den elementet.
  • I tilfælde af ELLER, skal en af ​​de 2 betingelser være sand, kun så finder den elementet.

Her vil vores XPath-forespørgsel se sådan ud

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

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

Brug AND og OR

Testtrin:

  1. Gå til https://demo.guru99.com/v1/
  2. I dette afsnit bruger vi ovenstående demoside til at søge efter elementer med forskellige funktioner i XPath.

Du vil finde et element ved hjælp af AND og OR, parent, starter-with og XPath-akser

OG ELLER Eksempel

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-forælder i Selenium

Forælder i Selenium er en metode, der bruges til at hente den overordnede node for den aktuelt valgte node på websiden. Den er meget nyttig i situationer, hvor du vælger et element og har brug for at hente det overordnede element ved hjælp af XPath. Denne metode bruges også til at hente den overordnede node.

Her vil vores XPath-forespørgsel se sådan ud

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

XPath-forælder i Selenium

XPath ved hjælp af forældre

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

Starter-med

Ved hjælp af funktionen Starts-with kan du finde det element, hvis attribut dynamisk ændres ved opdatering eller andre handlinger som klik, send osv.

Her vil vores XPath-forespørgsel se ud

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

Starter-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 akser

Ved at bruge XPath-akser kan du finde de dynamiske og meget komplekse elementer på en webside. XPath-akser indeholder flere metoder til at finde et element. Her vil diskutere et par metoder.

efter: Denne funktion returnerer det umiddelbare element af den bestemte komponent.

Her vil vores XPath-forespørgsel se ud

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

XPath ved hjælp af Følgende
XPath ved hjælp af følgende
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();
	}
}

Foregående: Denne funktion returnerer det foregående element i det bestemte element.

Her vil vores XPath-forespørgsel se ud

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

XPath ved hjælp af Preceding

XPath ved hjælp af 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) Aftagende: Denne funktion returnerer det efterkommerelement af det bestemte element.

Her vil vores XPath-forespørgsel se ud

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

XPath ved hjælp af Descendant

XPath ved hjælp af 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();
	}
}

Ofte Stillede Spørgsmål

I XPath vælger /* alle elementer på rodniveau i et XML- eller HTML-dokument. Det betyder "vælg et hvilket som helst element direkte under rodnoden". For eksempel ville /* i et HTML-dokument matche da det er elementet på øverste niveau under roden.

Funktionen contains() i XPath hjælper med at finde elementer, hvis attribut eller tekst delvist matcher en given værdi. Den er især nyttig, når den nøjagtige streng er uforudsigelig eller dynamisk. For eksempel, //div[contains(@class,'menu')] matcher enhver hvis klasse indeholder ordet "menu".

For at finde elementer baseret på et delvist match inden for deres klasseattribut, skal du bruge funktionen contains(). For eksempel, //button[contains(@class,'submit')] målretter mod alle med et klassenavn, der indeholder "submit", såsom "submit-btn" eller "form-submit". Det er en fleksibel måde at håndtere dynamiske klassenavne på.

Opsummer dette indlæg med: