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.
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')]"
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"
Voorvader:Om een โโelement te vinden op basis van het bovenliggende element, kunnen we het voorouderattribuut van XPath gebruiken.
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.
- Ga naar https://demo.guru99.com/test/guru99home/
- 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
- We vinden elementen met behulp van de XPath-functies tekst bevat, voorouder en broer.
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:
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:
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']
Teststappen:
- Ga naar https://demo.guru99.com/v1/
- 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 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')]
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

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










