Το XPath περιέχει: Text, Following Sibling & Ancestor in Selenium

🚀 Έξυπνη Σύνοψη

Το XPath Περιέχει, Αδελφό και Πρόγονο σε Selenium επιτρέπουν την ακριβή αναγνώριση στοιχείων ιστού χρησιμοποιώντας δομημένες σχέσεις και μοτίβα κειμένου. Αυτές οι συναρτήσεις XPath ενισχύουν την αξιοπιστία, την ευελιξία και τη συντηρησιμότητα του αυτοματισμού σε σύνθετες ιεραρχίες DOM.

  • Χρήση contains() για τον εντοπισμό δυναμικών στοιχείων με μερικό κείμενο, βελτιώνοντας την ανθεκτικότητα έναντι παραλλαγών κειμένου.
  • Εγγραφές following-sibling ancestor να διασχίζει τις ιεραρχίες των στοιχείων αποτελεσματικά και αποτελεσματικάtract σχετικούς κόμβους.
  • Συνδυάστε συναρτήσεις με λογικούς τελεστές (AND, OR) για βελτιωμένη και ακριβή στόχευση στοιχείων.
  • Αξιοποιήστε τους άξονες XPath (προηγούμενοι, απόγονοι) για συστηματική πλοήγηση σε σύνθετα δέντρα DOM.
  • Ενσωματώστε αυτές τις εκφράσεις σε Selenium σενάρια για διατηρήσιμο, δυναμικό και ανθεκτικό αυτοματισμό δοκιμών ιστού.

Το XPath περιέχει

Τι περιέχει το XPath;

Το XPath περιέχει είναι μια συνάρτηση μέσα σε μια έκφραση XPath, η οποία χρησιμοποιείται για την αναζήτηση στοιχείων ιστού που περιέχουν ένα συγκεκριμένο κείμενο. Μπορούμε π.χ.tracόλα τα στοιχεία που ταιριάζουν με τη δεδομένη τιμή κειμένου χρησιμοποιώντας τη συνάρτηση XPath contains() σε όλη την ιστοσελίδα. Η συνάρτηση Contains στο XPath έχει τη δυνατότητα να βρει το στοιχείο με μερικό κείμενο.

Παράδειγμα – περιέχει κείμενο

Εδώ ψάχνουμε μια άγκυρα .περιέχει κείμενο ως "SAP Μ'.

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

Το XPath περιέχει

ΣΗΜΕΙΩΣΗ: Μπορείτε να εξασκηθείτε στην ακόλουθη άσκηση 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"

Ακολουθώντας το Sibling στο XPath

ΠρόγονοςΓια να βρούμε ένα στοιχείο με βάση το γονικό στοιχείο, μπορούμε να χρησιμοποιήσουμε το χαρακτηριστικό antencent του XPath.

Ακολουθώντας το Sibling στο XPath

Ας κατανοήσουμε αυτές τις 3 συναρτήσεις χρησιμοποιώντας ένα παράδειγμα –

Βήματα δοκιμής:

Σημείωση: Από την ημερομηνία δημιουργίας του εκπαιδευτικού υλικού, η Αρχική Σελίδα του GuruΤο 99 έχει ενημερωθεί, επομένως χρησιμοποιήστε τον ιστότοπο επίδειξης για να εκτελέσετε δοκιμές

  1. Πηγαίνετε στο https://demo.guru99.com/test/guru99home/
  2. Στην ενότητα «Μερικά από τα πιο δημοφιλή μας μαθήματα», αναζητήστε όλα τα Web Elements που είναι αδέρφια ενός WebElement του οποίου το κείμενο είναι «ΣΕΛΗΝΙΟ»
  3. Θα βρούμε στοιχεία χρησιμοποιώντας τις συναρτήσεις XPath text contains, antagonist και simbill.

Ακολουθώντας το Sibling στο XPath

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

Η έξοδος θα είναι όπως:

USING Περιέχει κείμενο και XPath Sibling

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

Η έξοδος θα μοιάζει με-

Πλήρης Code

Χρησιμοποιώντας AND και OR

Χρησιμοποιώντας τις συναρτήσεις AND και OR, μπορείτε να βάλετε 2 συνθήκες στην έκφραση XPath.

  • Σε περίπτωση ΚΑΙ, και οι δύο συνθήκες θα πρέπει να ισχύουν, τότε μόνο βρίσκει το στοιχείο.
  • Σε περίπτωση OR, θα πρέπει να ισχύει οποιαδήποτε από τις 2 συνθήκες, τότε μόνο βρίσκει το στοιχείο.

Εδώ, το ερώτημά μας στο XPath θα έχει την εξής μορφή:

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

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

Χρησιμοποιώντας AND και OR

Βήματα δοκιμής:

  1. Πηγαίνετε στο https://demo.guru99.com/v1/
  2. Σε αυτήν την ενότητα, θα χρησιμοποιήσουμε την παραπάνω ιστοσελίδα επίδειξης για να αναζητήσουμε στοιχεία με διαφορετικές λειτουργίες του 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 in Selenium

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

XPath χρησιμοποιώντας το ακόλουθο
XPath χρησιμοποιώντας τα ακόλουθα
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

XPath χρησιμοποιώντας το Preceding

XPath χρησιμοποιώντας το 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) Απόγονος: Αυτή η συνάρτηση θα επιστρέψει το στοιχείο καταγωγής του συγκεκριμένου στοιχείου.

Εδώ το ερώτημά μας για το XPath θα είναι σαν

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

XPath χρησιμοποιώντας Descendant

XPath χρησιμοποιώντας 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();
	}
}

Συχνές Ερωτήσεις

Στο XPath, το /* επιλέγει όλα τα στοιχεία επιπέδου ρίζας ενός εγγράφου XML ή HTML. Σημαίνει «επιλέξτε οποιοδήποτε στοιχείο απευθείας κάτω από τον κόμβο ρίζας». Για παράδειγμα, σε ένα έγγραφο HTML, το /* θα αντιστοιχούσε αφού είναι το στοιχείο ανώτατου επιπέδου κάτω από τη ρίζα.

Η συνάρτηση contains() στο XPath βοηθά στον εντοπισμό στοιχείων των οποίων το χαρακτηριστικό ή το κείμενο ταιριάζει εν μέρει με μια δεδομένη τιμή. Είναι ιδιαίτερα χρήσιμη όταν η ακριβής συμβολοσειρά είναι απρόβλεπτη ή δυναμική. Για παράδειγμα, //div[contains(@class,'menu')] ταιριάζει με οποιοδήποτε του οποίου η κλάση περιλαμβάνει τη λέξη «μενού».

Για να εντοπίσετε στοιχεία με βάση μια μερική αντιστοίχιση εντός του χαρακτηριστικού κλάσης τους, χρησιμοποιήστε τη συνάρτηση contains(). Για παράδειγμα, //button[contains(@class,'submit')] Στοχεύει σε οποιαδήποτε κλάση με όνομα που περιλαμβάνει τη φράση "submit", όπως "submit-btn" ή "form-submit". Είναι ένας ευέλικτος τρόπος διαχείρισης δυναμικών ονομάτων κλάσεων.

Συνοψίστε αυτήν την ανάρτηση με: