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.
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')]"
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örfaderFör att hitta ett element baserat på föräldraelementet kan vi använda ancestor-attributet 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
- Gå till https://demo.guru99.com/test/guru99home/
- 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".
- Vi kommer att hitta element med hjälp av XPaths text innehåller, förfader och syskonfunktioner.
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:
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-
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']
Teststeg:
- Gå till https://demo.guru99.com/v1/
- 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 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')]
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

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










