XPath bevat: tekst, volgende broer of zus en voorouder in Selenium

๐Ÿš€ Slimme samenvatting

XPath bevat, broer/zus en voorouder in Selenium maken nauwkeurige identificatie van webelementen mogelijk met behulp van gestructureerde relaties en tekstpatronen. Deze XPath-functies verbeteren de betrouwbaarheid, flexibiliteit en onderhoudbaarheid van de automatisering in complexe DOM-hiรซrarchieรซn.

  • Gebruik contains() om dynamische elementen met gedeeltelijke tekst te lokaliseren, waardoor de robuustheid tegen tekstvariaties wordt verbeterd.
  • Toepassen following-sibling en ancestor om efficiรซnt en ex door elementhiรซrarchieรซn te navigerentract gerelateerde knooppunten.
  • Combineer functies met logische operatoren (AND, OR) voor een verfijnde en nauwkeurige elementtargeting.
  • Maak gebruik van XPath-assen (voorgaand en afstammend) om systematisch door complexe DOM-bomen te navigeren.
  • Integreer deze uitdrukkingen in Selenium scripts voor onderhoudbare, dynamische en veerkrachtige webtestautomatisering.

XPath bevat

Wat bevat XPath?

XPath bevat is een functie binnen een XPath-expressie, die wordt gebruikt om te zoeken naar webpagina-elementen die een bepaalde tekst bevatten. We kunnen bijvoorbeeldtracZoek alle elementen op de webpagina die overeenkomen met de opgegeven tekstwaarde met behulp van de XPath-functie `contains()`. `contains` in XPath kan elementen met een gedeeltelijke tekst vinden.

Voorbeeld โ€“ bevat tekst

Hier zoeken we een anker. bevat tekst als 'SAP M'.

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

XPath bevat

OPMERKING: U kunt de volgende XPath-oefening op deze https://demo.guru99.com/test/selenium-xpath.html

Als een eenvoudige XPath Als een complex webelement voor ons testscript niet gevonden kan worden, moeten we de functies uit de XPath 1.0-bibliotheek gebruiken. Met de combinatie van deze functies kunnen we een specifiekere XPath maken.

๐Ÿ‘‰ Schrijf je gratis in voor Live Selenium Testproject

Broer of zus volgen in XPath

A Broertje binnen Selenium Webstuurprogramma is een functie die wordt gebruikt om een โ€‹โ€‹webelement op te halen dat een broer of zus is van het bovenliggende element. Als het bovenliggende element bekend is, kan het webelement gemakkelijk worden gevonden of gelokaliseerd, waarbij het sibling-attribuut van de XPath-expressie kan worden gebruikt. Selenium Webstuurprogramma.

Broer of zus in XPath Voorbeeld:
Hier vinden we op basis van het zusterelement van 'a' 'h4'

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

Broer of zus volgen in XPath

Voorvader:Om een โ€‹โ€‹element te vinden op basis van het bovenliggende element, kunnen we het voorouderattribuut van XPath gebruiken.

Broer of zus volgen in XPath

Laten we deze 3 functies aan de hand van een voorbeeld begrijpen:

Teststappen:

Let op: Sinds de datum van creatie van de handleiding is de homepage van GuruVersie 99 is bijgewerkt, gebruik daarom de demosite om tests uit te voeren.

  1. Ga naar https://demo.guru99.com/test/guru99home/
  2. Zoek in de sectie 'Een paar van onze populairste cursussen' naar alle webelementen die broers of zussen zijn van een webelement waarvan de tekst 'SELENIUM' is
  3. We vinden elementen met behulp van de XPath-functies tekst bevat, voorouder en broer.

Broer of zus volgen in XPath

GEBRUIKEN Bevat tekst en XPath Sibling

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

De uitvoer zal er als volgt uitzien:

GEBRUIKEN Bevat tekst en XPath Sibling

XPath-voorouder in Selenium

XPath-voorouder in Selenium is een functie die gebruikt wordt om de voorouder van een specifiek element op de opgegeven laag te vinden. Het te retourneren niveau van de voorouder of het niveau van de voorouder ten opzichte van het niveau van het lid kan expliciet worden opgegeven. De functie retourneert het aantal hiรซrarchische stappen vanaf de voorouder en zoekt naar de gewenste voorouder.

Stel nu dat we alle elementen in de sectie 'Populaire cursus' moeten doorzoeken met behulp van de voorouder van het anker waarvan de tekst 'SELENIUM' is.

Hier zal onze xpath-query er zo uitzien

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

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

De uitvoer ziet er zo uit:

Volledige Code

Met EN en OF

Door AND en OR te gebruiken, kunt u twee voorwaarden in uw XPath-expressie opnemen.

  • In het geval van EN moeten beide voorwaarden waar zijn. Alleen dan wordt het element gevonden.
  • In het geval van OF moet รฉรฉn van de twee voorwaarden waar zijn. Alleen dan wordt het element gevonden.

Hier zal onze XPath-query er als volgt uitzien:

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

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

Met EN en OF

Teststappen:

  1. Ga naar https://demo.guru99.com/v1/
  2. In dit gedeelte gebruiken we de bovenstaande demosite om te zoeken naar elementen met verschillende functies van XPath.

U zult een element vinden met de assen AND en OR, parent, starts-with en XPath

EN OF Voorbeeld

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-ouder in Selenium

Ouder binnen Selenium is een methode die wordt gebruikt om het bovenliggende knooppunt van het huidige geselecteerde knooppunt op de webpagina op te halen. Dit is erg handig in situaties waarin u een element selecteert en het bovenliggende element via XPath moet ophalen. Deze methode wordt ook gebruikt om het bovenliggende element van het bovenliggende knooppunt op te halen.

Hier zal onze XPath-query er als volgt uitzien:

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

XPath-ouder in Selenium

XPath met behulp van 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();
	}
}

Begint met

Met de functie Starts-with kunt u het element vinden waarvan het kenmerk dynamisch verandert bij vernieuwen of andere bewerkingen, zoals klikken, verzenden, enz.

Hier zal onze XPath-query er zo uitzien

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

Begint met

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-assen

Met XPath-assen kunt u de dynamische en zeer complexe elementen op een webpagina vinden. XPath-assen bevatten verschillende methoden om een โ€‹โ€‹element te vinden. Hier bespreken we een paar methoden.

volgend: Deze functie retourneert het directe element van het specifieke onderdeel.

Hier zal onze XPath-query er zo uitzien

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

XPath met behulp van Volgen
XPath gebruikt het volgende
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();
	}
}

Voorafgaand: Deze functie retourneert het voorgaande element van het specifieke element.

Hier zal onze XPath-query er zo uitzien

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

XPath met behulp van Vooraf

XPath met behulp van Vooraf
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) Aflopend: Deze functie retourneert het afstammende element van het specifieke element.

Hier zal onze XPath-query er zo uitzien

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

XPath met Descendant

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

Veelgestelde vragen

In XPath selecteert /* alle elementen op rootniveau van een XML- of HTML-document. Dit betekent "selecteer elk element direct onder de rootnode". In een HTML-document zou /* bijvoorbeeld overeenkomen met omdat het het hoogste element onder de root is.

De contains()-functie in XPath helpt bij het vinden van elementen waarvan het kenmerk of de tekst gedeeltelijk overeenkomt met een bepaalde waarde. Dit is vooral handig wanneer de exacte tekenreeks onvoorspelbaar of dynamisch is. Bijvoorbeeld: //div[contains(@class,'menu')] komt overeen met elke tot wiens klasse het woord โ€œmenuโ€ behoort.

Om elementen te lokaliseren op basis van een gedeeltelijke overeenkomst binnen hun klasseattribuut, gebruikt u de functie contains(). Bijvoorbeeld: //button[contains(@class,'submit')] richt zich op alle klassen met een klassenaam die "submit" bevat, zoals "submit-btn" of "form-submit". Dit is een flexibele manier om dynamische klassennamen te verwerken.

Vat dit bericht samen met: