Πώς να χειριστείτε δυναμικούς πίνακες Ιστού Selenium
Πίνακας Ιστού σε Selenium
Υπάρχουν δύο τύποι πινάκων HTML που δημοσιεύονται στον Ιστό-
- Στατικοί πίνακες: Τα δεδομένα είναι στατικά, δηλαδή ο αριθμός γραμμών και στηλών είναι σταθερός.
- Δυναμικοί πίνακες: Τα δεδομένα είναι δυναμικά, π.χ. Ο αριθμός γραμμών και στηλών ΔΕΝ είναι σταθερός.
Πώς να χειριστείτε το δυναμικό τραπέζι Selenium
Παρακάτω είναι ένα παράδειγμα δυναμικού πίνακα ιστού σε Selenium για ΠΩΛΗΣΗ. Με βάση τα φίλτρα ημερομηνίας εισαγωγής, ο αριθμός των σειρών θα αλλάξει. Άρα, έχει δυναμικό χαρακτήρα.
Ο χειρισμός του στατικού πίνακα είναι εύκολος, αλλά ο χειρισμός των δυναμικών τραπεζιών μέσα Selenium είναι λίγο δύσκολο καθώς οι γραμμές και οι στήλες δεν είναι σταθερές.
Χρήση X-Path για εντοπισμό στοιχείων πίνακα Ιστού
Πριν εντοπίσουμε το στοιχείο ιστού, ας καταλάβουμε πρώτα-
Τι είναι ένα στοιχείο web;
Τα στοιχεία ιστού δεν είναι παρά στοιχεία HTML όπως πλαίσιο κειμένου, αναπτυσσόμενα κουμπιά επιλογής, κουμπιά υποβολής κ.λπ. Αυτά τα στοιχεία HTML είναι γραμμένα με Εκκίνηση ετικέτα και τελειώνει με ένα τέλος tags.
Για παράδειγμα,
Το πρώτο μου έγγραφο HTML.
Βήματα για τη λήψη της διαδρομής X του στοιχείου ιστού που θέλουμε να εντοπίσουμε.
Βήμα 1) Στο Chrome, Μεταβείτε στο https://demo.guru99.com/test/web-table-element.php
Βήμα 2) Κάντε δεξί κλικ στο στοιχείο ιστού του οποίου η διαδρομή x πρέπει να ληφθεί. Στην περίπτωσή μας, κάντε δεξί κλικ στην «Εταιρεία» Επιλέξτε Επιθεώρηση. Θα εμφανιστεί η παρακάτω οθόνη -
Βήμα 3) Κάντε δεξί κλικ στο επισημασμένο στοιχείο web > Επιλέξτε Αντιγραφή -> Αντιγραφή διαδρομής x.
Βήμα 4) Χρησιμοποιήστε το αντιγραμμένο X-path “//*[@id=”leftcontainer”]/table/thead/tr/th [1]” στο Selenium WebDriver για να εντοπίσετε το στοιχείο.
Παράδειγμα: Λήψη αριθμού γραμμών και στηλών από το Dynamic WebTable
Κατά τον χειρισμό δυναμικού πίνακα ιστού Selenium, δεν μπορούμε να προβλέψουμε τον αριθμό των γραμμών και στηλών του.
Χρησιμοποιώντας Selenium πρόγραμμα οδήγησης web, μπορούμε να βρούμε
- Αριθμός γραμμών και στηλών του πίνακα ιστού μέσα Selenium
- Σειρά X ή δεδομένα στήλης Υ.
Παρακάτω είναι το πρόγραμμα για τη λήψη του συνολικού αριθμού γραμμών και στηλών για τη διαχείριση του πίνακα ιστού Selenium:
import java.text.ParseException; 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; public class Noofrowsandcols { public static void main(String[] args) throws ParseException { WebDriver wd; System.setProperty("webdriver.chrome.driver","G://chromedriver.exe"); wd= new ChromeDriver(); wd.get("https://demo.guru99.com/test/web-table-element.php"); //No.of Columns List <webelement> col = wd.findElements(By.xpath(".//*[@id=\"leftcontainer\"]/table/thead/tr/th")); System.out.println("No of cols are : " +col.size()); //No.of rows List <webelement> rows = wd.findElements(By.xpath(".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println("No of rows are : " + rows.size()); wd.close(); } }
Επεξήγηση κώδικα:
- Εδώ έχουμε πρώτα δηλώσει το αντικείμενο του προγράμματος οδήγησης Web "wd" και το αρχικοποιήσαμε σε πρόγραμμα οδήγησης chrome.
- Χρησιμοποιούμε List στο συνολικό αριθμό στηλών στο "col".
- Οι εντολές findElements επιστρέφουν μια λίστα με ΟΛΑ τα στοιχεία που ταιριάζουν με τον καθορισμένο εντοπιστή
- χρησιμοποιώντας το findElements και το X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th παίρνουμε όλες τις στήλες
- Ομοίως, επαναλαμβάνουμε τη διαδικασία για σειρές.
Παραγωγή:
Παράδειγμα: Ανάκτηση τιμής κελιού μιας συγκεκριμένης γραμμής και στήλης του Δυναμικού πίνακα
Ας υποθέσουμε ότι χρειαζόμαστε 3rd γραμμή του πίνακα και τα δεδομένα του δεύτερου κελιού του. Δείτε τον παρακάτω πίνακα -
Στον παραπάνω πίνακα, τα δεδομένα ενημερώνονται τακτικά μετά από κάποιο χρονικό διάστημα. Τα δεδομένα που προσπαθείτε να ανακτήσετε θα είναι διαφορετικά από το παραπάνω στιγμιότυπο οθόνης. Ωστόσο, ο κωδικός παραμένει ο ίδιος. Εδώ είναι ένα δείγμα προγράμματος για να πάρετε το 3rd σειρά και 2nd δεδομένα της στήλης.
import java.text.ParseException; 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 java.util.concurrent.TimeUnit; public class RowandCell { public static void main(String[] args) throws ParseException { WebDriver wd; System.setProperty("webdriver.chrome.driver","G://chromedriver.exe"); wd= new ChromeDriver(); wd.get("https://demo.guru99.com/test/web-table-element.php"); wd.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); WebElement baseTable = wd.findElement(By.tagName("table")); //To find third row of table WebElement tableRow = baseTable.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody/tr[3]")); String rowtext = tableRow.getText(); System.out.println("Third row of table : "+rowtext); //to get 3rd row's 2nd column data WebElement cellIneed = tableRow.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody/tr[3]/td[2]")); String valueIneed = cellIneed.getText(); System.out.println("Cell value is : " + valueIneed); wd.close(); } }
Επεξήγηση κώδικα:
- Ο πίνακας βρίσκεται χρησιμοποιώντας την ιδιότητα εντοπισμού "tagname".
- Χρησιμοποιώντας XPath "//*[@id=\"leftcontainer\"]/table/tbody/tr[3]" βρείτε το 3rd γραμμή και παίρνει το κείμενό της χρησιμοποιώντας τη συνάρτηση getText ().
- Χρησιμοποιώντας το Xpath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2]” βρείτε το 2ο κελί σε 3rd γραμμή και παίρνει το κείμενό της χρησιμοποιώντας τη συνάρτηση getText ().
Παραγωγή:
Παράδειγμα: Λάβετε το μέγιστο όλων των τιμών σε μια στήλη δυναμικού πίνακα
Σε αυτό το παράδειγμα, θα λάβουμε το μέγιστο όλων των τιμών σε μια συγκεκριμένη στήλη.
Ανατρέξτε στον παρακάτω πίνακα -
Εδώ είναι ο κωδικός
import java.text.ParseException; 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 java.text.NumberFormat; public class MaxFromTable { public static void main(String[] args) throws ParseException { WebDriver wd; System.setProperty("webdriver.chrome.driver","G://chromedriver.exe"); wd= new ChromeDriver(); wd.get("https://demo.guru99.com/test/web-table-element.php"); String max; double m=0,r=0; //No. of Columns List <webelement> col = wd.findElements(By.xpath(".//*[@id='leftcontainer']/table/thead/tr/th")); System.out.println("Total No of columns are : " +col.size()); //No.of rows List <webelement> rows = wd.findElements(By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println("Total No of rows are : " + rows.size()); for (int i =1;i<rows.size();i++) { max= wd.findElement(By.xpath("html/body/div[1]/div[5]/table/tbody/tr[" + (i+1)+ "]/td[4]")).getText(); NumberFormat f =NumberFormat.getNumberInstance(); Number num = f.parse(max); max = num.toString(); m = Double.parseDouble(max); if(m>r) { r=m; } } System.out.println("Maximum current price is : "+ r); } } </webelement></webelement>
Επεξήγηση κώδικα:
- Χρησιμοποιώντας το πρόγραμμα οδήγησης chrome, εντοπίζουμε τον πίνακα ιστού και λαμβάνουμε τον συνολικό αριθμό σειρών χρησιμοποιώντας το XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
- Χρησιμοποιώντας το βρόχο for, επαναλαμβάνουμε τον συνολικό αριθμό σειρών και ανακτούμε τις τιμές μία προς μία. Για να λάβουμε την επόμενη σειρά χρησιμοποιούμε το (i+1) στο XPath
- Συγκρίνουμε την παλιά τιμή με τη νέα τιμή και η μέγιστη τιμή εκτυπώνεται στο τέλος του βρόχου for
Παραγωγή
Παράδειγμα: Λάβετε όλες τις τιμές ενός δυναμικού πίνακα
Σκεφτείτε τον παρακάτω πίνακα: https://demo.guru99.com/test/table.html
Ο αριθμός των στηλών για κάθε γραμμή είναι διαφορετικός.
Εδώ οι σειρές 1, 2 και 4 έχουν 3 κελιά και η σειρά 3 έχει 2 κελιά και η σειρά 5 έχει 1 κελί.
Πρέπει να πάρουμε τιμές όλων των κελιών
Εδώ είναι ο κωδικός:
import java.text.ParseException; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import java.util.concurrent.TimeUnit; import org.openqa.selenium.chrome.ChromeDriver; public class NofRowsColmns { public static void main(String[] args) throws ParseException { WebDriver wd; System.setProperty("webdriver.chrome.driver","G://chromedriver.exe"); wd = new ChromeDriver(); wd.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); wd.get("https://demo.guru99.com/test/table.html"); //To locate table. WebElement mytable = wd.findElement(By.xpath("/html/body/table/tbody")); //To locate rows of table. List < WebElement > rows_table = mytable.findElements(By.tagName("tr")); //To calculate no of rows In table. int rows_count = rows_table.size(); //Loop will execute till the last row of table. for (int row = 0; row < rows_count; row++) { //To locate columns(cells) of that specific row. List < WebElement > Columns_row = rows_table.get(row).findElements(By.tagName("td")); //To calculate no of columns (cells). In that specific row. int columns_count = Columns_row.size(); System.out.println("Number of cells In Row " + row + " are " + columns_count); //Loop will execute till the last cell of that specific row. for (int column = 0; column < columns_count; column++) { // To retrieve text from that specific cell. String celtext = Columns_row.get(column).getText(); System.out.println("Cell Value of row number " + row + " and column number " + column + " Is " + celtext); } System.out.println("-------------------------------------------------- "); } } }
Επεξήγηση κώδικα:
- Το rows_count δίνει τον συνολικό αριθμό σειρών
- για κάθε σειρά παίρνουμε τον συνολικό αριθμό στηλών που χρησιμοποιούμε
rows_table.get(row).findElements(By.tagName("td"));
- Επαναλαμβάνουμε μέσα από κάθε στήλη και κάθε γραμμή και ανακτούμε τιμές.
Παραγωγή:
Περίληψη
- Η By.xpath() χρησιμοποιείται συνήθως για πρόσβαση σε στοιχεία πίνακα.
- Στατικοί πίνακες ιστού μέσα Selenium είναι συνεπείς στη φύση τους. δηλ. έχουν σταθερό αριθμό σειρών καθώς και δεδομένα κυψέλης.
- Οι δυναμικοί πίνακες ιστού είναι ασυνεπείς, δηλαδή δεν έχουν σταθερό αριθμό σειρών και δεδομένων κελιών.
- Χρησιμοποιώντας το πρόγραμμα οδήγησης web selenium, μπορούμε να χειριστούμε εύκολα δυναμικούς πίνακες ιστού.
- Selenium Το Webdriver μας επιτρέπει να έχουμε πρόσβαση σε δυναμικούς πίνακες ιστού από αυτούς Χ-μονοπάτι. Η κατανόηση του τρόπου χειρισμού του διαδικτυακού τραπεζιού σε σελήνιο είναι ζωτικής σημασίας για αποτελεσματικές δοκιμές αυτοματισμού.