Το XPath περιέχει: Text, Following Sibling & Ancestor in Selenium
Τι περιέχει το XPath;
Το XPath περιέχει είναι μια συνάρτηση εντός της έκφρασης Xpath που χρησιμοποιείται για την αναζήτηση των στοιχείων web που περιέχουν ένα συγκεκριμένο κείμενο. Μπορούμε να εξαγάγουμε όλα τα στοιχεία που ταιριάζουν με τη δεδομένη τιμή κειμένου χρησιμοποιώντας τη συνάρτηση XPath contain() σε όλη την ιστοσελίδα. Περιέχει στο XPath έχει τη δυνατότητα να βρει το στοιχείο με μερικό κείμενο.
Παράδειγμα – περιέχει κείμενο
Εδώ ψάχνουμε μια άγκυρα .περιέχει κείμενο ως "SAP Μ'.
"//h4/a[contains(text(),'SAP M')]"
ΣΗΜΕΙΩΣΗ: Μπορείτε να εξασκηθείτε στην ακόλουθη άσκηση 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"
Πρόγονος: Για να βρούμε ένα στοιχείο με βάση το γονικό στοιχείο μπορούμε να χρησιμοποιήσουμε το χαρακτηριστικό ancestor του XPath.
Ας κατανοήσουμε αυτές τις 3 συναρτήσεις χρησιμοποιώντας ένα παράδειγμα -
Βήματα δοκιμής:
Σημείωση: Από την ημερομηνία δημιουργίας του σεμιναρίου, η αρχική σελίδα του Guru99 έχει ενημερωθεί, επομένως χρησιμοποιήστε τον ιστότοπο επίδειξης για να εκτελέσετε δοκιμές
- Πηγαίνετε στο https://demo.guru99.com/test/guru99home/
- Στην ενότητα "Μερικά από τα πιο δημοφιλή μας μαθήματα", αναζητήστε όλα τα Στοιχεία Ιστού που είναι αδέλφια ενός WebElement του οποίου το κείμενο είναι "SELENIUM"
- Θα βρούμε το στοιχείο που χρησιμοποιεί το κείμενο 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(); } }
Η έξοδος θα είναι όπως:
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']
Βήματα δοκιμής:
- Πηγαίνετε στο 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(); } }
Σύνοψη
- Υπάρχουν ορισμένες περιπτώσεις όπου το κανονικό XPath δεν μπορεί να χρησιμοποιηθεί για την εύρεση ενός στοιχείου. Σε μια τέτοια περίπτωση, χρειαζόμαστε διαφορετικές συναρτήσεις από το ερώτημα xpath.
- Υπάρχουν ορισμένες σημαντικές λειτουργίες του XPath, όπως το XPath περιέχει, γονέας, πρόγονοι, ακόλουθοι αδελφοί κ.λπ.
- Με τη βοήθεια αυτών των συναρτήσεων, μπορείτε να δημιουργήσετε σύνθετες εκφράσεις XPath. Εάν χρειάζεται να κατανοήσετε πώς να χρησιμοποιείτε συγκεκριμένα τα περιέχει στο XPath, η λειτουργία περιέχει σε σελήνιο παρέχει έναν εύκολο τρόπο αναζήτησης στοιχείων ιστού με βάση τη μερική αντιστοίχιση κειμένου.