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

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

Το XPath περιέχει είναι μια συνάρτηση εντός της έκφρασης Xpath που χρησιμοποιείται για την αναζήτηση των στοιχείων web που περιέχουν ένα συγκεκριμένο κείμενο. Μπορούμε να εξαγάγουμε όλα τα στοιχεία που ταιριάζουν με τη δεδομένη τιμή κειμένου χρησιμοποιώντας τη συνάρτηση XPath contain() σε όλη την ιστοσελίδα. Περιέχει στο XPath έχει τη δυνατότητα να βρει το στοιχείο με μερικό κείμενο.

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

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

Το XPath περιέχει

ΣΗΜΕΙΩΣΗ: Μπορείτε να εξασκηθείτε στην ακόλουθη άσκηση XPath σε αυτό https://demo.guru99.com/test/selenium-xpath.html

Αν ένα απλό XPath δεν μπορεί να βρει ένα περίπλοκο στοιχείο ιστού για το σενάριο δοκιμής μας, πρέπει να χρησιμοποιήσουμε τις λειτουργίες από τη βιβλιοθήκη XPath 1.0. Με τον συνδυασμό αυτών των λειτουργιών, μπορούμε να δημιουργήσουμε πιο συγκεκριμένο XPath.

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

A Αδέρφια μέσα Selenium Πρόγραμμα οδήγησης Web είναι μια συνάρτηση που χρησιμοποιείται για την ανάκτηση ενός στοιχείου ιστού που είναι αδερφό στο γονικό στοιχείο. Εάν το γονικό στοιχείο είναι γνωστό, τότε μπορεί εύκολα να βρεθεί ή να εντοπιστεί το στοιχείο Ιστού που μπορεί να χρησιμοποιήσει το χαρακτηριστικό αδελφό της έκφρασης Xpath στο πρόγραμμα οδήγησης web selenium.

Παράδειγμα αδερφού στο XPath:
Εδώ με βάση το αδελφικό στοιχείο του 'a' βρίσκουμε το 'h4'

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

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

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

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

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

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

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

  1. Πηγαίνετε στο https://demo.guru99.com/test/guru99home/
  2. Στην ενότητα "Μερικά από τα πιο δημοφιλή μας μαθήματα", αναζητήστε όλα τα Στοιχεία Ιστού που είναι αδέλφια ενός WebElement του οποίου το κείμενο είναι "SELENIUM"
  3. Θα βρούμε το στοιχείο που χρησιμοποιεί το κείμενο XPath που περιέχει τη συνάρτηση ,πρόγονος και αδελφός.

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

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

import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;

public class SiblingAndParentInXpath {

    @Test

    public void testSiblingAndParentInXpath(){

    	WebDriver driver;
    	String driverPath = "C:\\geckodriver.exe";
    	System.setProperty("webdriver.gecko.driver", driverPath);
        driver = new FirefoxDriver();        
        
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://demo.guru99.com/test/guru99home/");

        //Search element inside 'Popular course' which are sibling of control 'SELENIUM' ,Here first we will find a h2 whose text is ''A few of our most popular courses' ,then we move to its parent element which is a 'div' , inside this div we will find a link whose text is 'SELENIUM' then at last we will find all of the sibling elements of this link('SELENIUM')
        
        List <WebElement> dateBox = driver.findElements(By.xpath("//h2[contains(text(),'A few of our most popular courses')]/parent::div//div[//a[text()='SELENIUM']]/following-sibling::div[@class='rt-grid-2 rt-omega']"));

        //Print all the which are sibling of the the element named as 'SELENIUM' in 'Popular course'
        for (WebElement webElement : dateBox) {
            System.out.println(webElement.getText());
        }     

        driver.close();
    }
}

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

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

XPath Ancestor σε Selenium

XPath Ancestor σε Selenium είναι μια συνάρτηση που χρησιμοποιείται για να βρει τον πρόγονο ενός συγκεκριμένου μέλους στο καθορισμένο επίπεδο. Το επίπεδο του προγόνου που θα επιστραφεί ή το επίπεδο του προγόνου σε σχέση με το επίπεδο του μέλους μπορεί να καθοριστεί ρητά. Επιστρέφει αριθμό ιεραρχικών βημάτων από τον πρόγονο, εντοπίζοντας τον καθορισμένο πρόγονο που θέλει ο χρήστης.

Τώρα ας υποθέσουμε ότι πρέπει να κάνουμε αναζήτηση σε όλα τα στοιχεία στην ενότητα "Δημοφιλές μάθημα" με τη βοήθεια του προγόνου της άγκυρας του οποίου το κείμενο είναι "SELENIUM"

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

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

Πλήρης κώδικας

import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;

public class AncestorInXpath{

@Test

    public void testAncestorInXpath(){

        WebDriver driver = new FirefoxDriver();             
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://demo.guru99.com/test/guru99home/");

        //Search All elements in 'Popular course' section 
		//with the help of ancestor of the anchor whose text is 'SELENIUM'

        List <WebElement> dateBox = driver.findElements(By.xpath("//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div"));

        //Print all the which are sibling of the element named as 'SELENIUM' in 'Popular course'

        for (WebElement webElement : dateBox) {
            System.out.println(webElement.getText());
        }
     
        driver.quit();
    }
}

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

Πλήρης κώδικας

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

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

  • Σε περίπτωση AND θα πρέπει να ισχύουν και οι δύο συνθήκες, τότε μόνο βρίσκει το στοιχείο.
  • Σε περίπτωση Ή θα πρέπει να ισχύει οποιαδήποτε από τις 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 δεν μπορεί να χρησιμοποιηθεί για την εύρεση ενός στοιχείου. Σε μια τέτοια περίπτωση, χρειαζόμαστε διαφορετικές συναρτήσεις από το ερώτημα xpath.
  • Υπάρχουν ορισμένες σημαντικές λειτουργίες του XPath, όπως το XPath περιέχει, γονέας, πρόγονοι, ακόλουθοι αδελφοί κ.λπ.
  • Με τη βοήθεια αυτών των συναρτήσεων, μπορείτε να δημιουργήσετε σύνθετες εκφράσεις XPath. Εάν χρειάζεται να κατανοήσετε πώς να χρησιμοποιείτε συγκεκριμένα τα περιέχει στο XPath, η λειτουργία περιέχει σε σελήνιο παρέχει έναν εύκολο τρόπο αναζήτησης στοιχείων ιστού με βάση τη μερική αντιστοίχιση κειμένου.