Το XPath περιέχει: Text, Following Sibling & Ancestor in Selenium
🚀 Έξυπνη Σύνοψη
Το XPath Περιέχει, Αδελφό και Πρόγονο σε Selenium επιτρέπουν την ακριβή αναγνώριση στοιχείων ιστού χρησιμοποιώντας δομημένες σχέσεις και μοτίβα κειμένου. Αυτές οι συναρτήσεις XPath ενισχύουν την αξιοπιστία, την ευελιξία και τη συντηρησιμότητα του αυτοματισμού σε σύνθετες ιεραρχίες DOM.
Τι περιέχει το XPath;
Το XPath περιέχει είναι μια συνάρτηση μέσα σε μια έκφραση XPath, η οποία χρησιμοποιείται για την αναζήτηση στοιχείων ιστού που περιέχουν ένα συγκεκριμένο κείμενο. Μπορούμε π.χ.tracόλα τα στοιχεία που ταιριάζουν με τη δεδομένη τιμή κειμένου χρησιμοποιώντας τη συνάρτηση XPath contains() σε όλη την ιστοσελίδα. Η συνάρτηση Contains στο XPath έχει τη δυνατότητα να βρει το στοιχείο με μερικό κείμενο.
Παράδειγμα – περιέχει κείμενο
Εδώ ψάχνουμε μια άγκυρα .περιέχει κείμενο ως "SAP Μ'.
"//h4/a[contains(text(),'SAP M')]"
ΣΗΜΕΙΩΣΗ: Μπορείτε να εξασκηθείτε στην ακόλουθη άσκηση XPath σε αυτό https://demo.guru99.com/test/selenium-xpath.html
Αν ένα απλό XPath Αν δεν είναι δυνατή η εύρεση ενός περίπλοκου στοιχείου ιστού για το δοκιμαστικό μας σενάριο, πρέπει να χρησιμοποιήσουμε τις συναρτήσεις από τη βιβλιοθήκη XPath 1.0. Με τον συνδυασμό αυτών των συναρτήσεων, μπορούμε να δημιουργήσουμε ένα πιο συγκεκριμένο XPath.
👉 Εγγραφείτε δωρεάν ζωντανά Selenium Έργο δοκιμής
Ακολουθώντας το Sibling στο XPath
A Αδέρφια μέσα Selenium Πρόγραμμα οδήγησης Web είναι μια συνάρτηση που χρησιμοποιείται για την ανάκτηση ενός στοιχείου web που είναι αδελφό του γονικού στοιχείου. Εάν το γονικό στοιχείο είναι γνωστό, τότε το στοιχείο web μπορεί εύκολα να βρεθεί ή να εντοπιστεί, κάτι που μπορεί να χρησιμοποιήσει το χαρακτηριστικό αδελφό της έκφρασης XPath στο Selenium WebDriver.
Παράδειγμα αδερφού στο XPath:
Εδώ, με βάση το αδελφικό στοιχείο του 'a' βρίσκουμε το 'h4'
"//div[@class='canvas- graph']//a[@href='/accounting.html'][i[@class='icon-usd']]/following-sibling::h4"
ΠρόγονοςΓια να βρούμε ένα στοιχείο με βάση το γονικό στοιχείο, μπορούμε να χρησιμοποιήσουμε το χαρακτηριστικό antencent του XPath.
Ας κατανοήσουμε αυτές τις 3 συναρτήσεις χρησιμοποιώντας ένα παράδειγμα –
Βήματα δοκιμής:
Σημείωση: Από την ημερομηνία δημιουργίας του εκπαιδευτικού υλικού, η Αρχική Σελίδα του GuruΤο 99 έχει ενημερωθεί, επομένως χρησιμοποιήστε τον ιστότοπο επίδειξης για να εκτελέσετε δοκιμές
- Πηγαίνετε στο https://demo.guru99.com/test/guru99home/
- Στην ενότητα «Μερικά από τα πιο δημοφιλή μας μαθήματα», αναζητήστε όλα τα Web Elements που είναι αδέρφια ενός WebElement του οποίου το κείμενο είναι «ΣΕΛΗΝΙΟ»
- Θα βρούμε στοιχεία χρησιμοποιώντας τις συναρτήσεις XPath text contains, antagonist και simbill.
USING Περιέχει κείμενο και 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();
}
}
}
Η έξοδος θα είναι όπως:
XPath Ancestor σε Selenium
XPath Ancestor σε Selenium είναι μια συνάρτηση που χρησιμοποιείται για την εύρεση του προγόνου ενός συγκεκριμένου στοιχείου στο καθορισμένο επίπεδο. Το επίπεδο του προγόνου που θα επιστραφεί ή το επίπεδο του προγόνου σε σχέση με το επίπεδο του μέλους μπορεί να καθοριστεί ρητά. Επιστρέφει τον αριθμό των ιεραρχικών βημάτων από τον πρόγονο, εντοπίζοντας τον καθορισμένο πρόγονο που θέλει ο χρήστης.
Τώρα, ας υποθέσουμε ότι πρέπει να αναζητήσουμε όλα τα στοιχεία στην ενότητα «Δημοφιλές μάθημα» με τη βοήθεια του προγόνου της άγκυρας της οποίας το κείμενο είναι «ΣΕΛΗΝΙΟ».
Εδώ το ερώτημά μας xpath θα είναι σαν
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div"
Πλήρης 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();
}
}
}
Η έξοδος θα μοιάζει με-
Χρησιμοποιώντας AND και OR
Χρησιμοποιώντας τις συναρτήσεις AND και OR, μπορείτε να βάλετε 2 συνθήκες στην έκφραση XPath.
- Σε περίπτωση ΚΑΙ, και οι δύο συνθήκες θα πρέπει να ισχύουν, τότε μόνο βρίσκει το στοιχείο.
- Σε περίπτωση OR, θα πρέπει να ισχύει οποιαδήποτε από τις 2 συνθήκες, τότε μόνο βρίσκει το στοιχείο.
Εδώ, το ερώτημά μας στο XPath θα έχει την εξής μορφή:
Xpath=//*[@type='submit' OR @name='btnReset']
Xpath=//input[@type='submit' and @name='btnLogin']
Βήματα δοκιμής:
- Πηγαίνετε στο https://demo.guru99.com/v1/
- Σε αυτήν την ενότητα, θα χρησιμοποιήσουμε την παραπάνω ιστοσελίδα επίδειξης για να αναζητήσουμε στοιχεία με διαφορετικές λειτουργίες του XPath.
Θα βρείτε ένα στοιχείο χρησιμοποιώντας άξονες AND και OR, γονικό, starts-with και XPath
ΚΑΙ Ή Παράδειγμα
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 Parent in Selenium
Γονέας μέσα Selenium είναι μια μέθοδος που χρησιμοποιείται για την ανάκτηση του γονικού κόμβου του τρέχοντος κόμβου που έχει επιλεγεί στην ιστοσελίδα. Είναι πολύ χρήσιμη σε περιπτώσεις όπου επιλέγετε ένα στοιχείο και χρειάζεται να λάβετε το γονικό στοιχείο χρησιμοποιώντας XPath. Αυτή η μέθοδος χρησιμοποιείται επίσης για την ανάκτηση του γονικού κόμβου του γονέα.
Εδώ, το ερώτημά μας στο XPath θα έχει την εξής μορφή:
Xpath=//*[@id='rt-feature']//parent::div
XPath με χρήση 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();
}
}
Ξεκινάει με
Χρησιμοποιώντας τη συνάρτηση Starts-with, μπορείτε να βρείτε το στοιχείο του οποίου το χαρακτηριστικό αλλάζει δυναμικά κατά την ανανέωση ή άλλες λειτουργίες, όπως κλικ, υποβολή κ.λπ.
Εδώ το ερώτημά μας για το XPath θα είναι σαν
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
Χρησιμοποιώντας άξονες XPath, μπορείτε να βρείτε τα δυναμικά και πολύ περίπλοκα στοιχεία σε μια ιστοσελίδα. Οι άξονες XPath περιέχουν διάφορες μεθόδους για την εύρεση ενός στοιχείου. Εδώ, θα συζητήσουμε μερικές μεθόδους.
Εξής: Αυτή η συνάρτηση θα επιστρέψει το άμεσο στοιχείο του συγκεκριμένου στοιχείου.
Εδώ το ερώτημά μας για το XPath θα είναι σαν
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();
}
}
Προηγούμενος: Αυτή η συνάρτηση θα επιστρέψει το προηγούμενο στοιχείο του συγκεκριμένου στοιχείου.
Εδώ το ερώτημά μας για το XPath θα είναι σαν
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) Απόγονος: Αυτή η συνάρτηση θα επιστρέψει το στοιχείο καταγωγής του συγκεκριμένου στοιχείου.
Εδώ το ερώτημά μας για το XPath θα είναι σαν
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();
}
}










