Χειρισμός δυναμικών πινάκων Ιστού με χρήση του Selenium WebDriver

Πίνακας περιεχομένων:

Anonim

Υπάρχουν δύο τύποι πινάκων HTML που δημοσιεύονται στον Ιστό

  1. Στατικοί πίνακες : Τα δεδομένα είναι στατικά, δηλαδή ο αριθμός των γραμμών και των στηλών είναι σταθεροί.
  2. Δυναμικοί πίνακες : Τα δεδομένα είναι δυναμικά, δηλαδή ο αριθμός των γραμμών και των στηλών ΔΕΝ είναι σταθεροί.

Τώρα, θα μάθουμε πώς να χειριζόμαστε το δυναμικό τραπέζι στο Σελήνιο:

Ακολουθεί ένα παράδειγμα ενός δυναμικού πίνακα ιστού στο Selenium for Sales. Με βάση τα φίλτρα ημερομηνίας εισαγωγής, ο αριθμός των γραμμών θα αλλάξει. Είναι λοιπόν δυναμικό στη φύση.

Ο χειρισμός στατικού πίνακα είναι εύκολος, αλλά ο χειρισμός δυναμικών πινάκων στο Σελήνιο είναι λίγο δύσκολος καθώς οι γραμμές και οι στήλες δεν είναι σταθερές.

Σε αυτό το σεμινάριο, θα μάθετε-

  • Χρήση της διαδρομής X για τον εντοπισμό στοιχείων πίνακα Web
  • Παράδειγμα: Λήψη αριθμού σειρών και στηλών από το Dynamic WebTable
  • Παράδειγμα: Ανάκτηση τιμής κελιού μιας συγκεκριμένης σειράς και στήλης του Δυναμικού πίνακα
  • Παράδειγμα: Λάβετε το μέγιστο όλων των τιμών σε μια στήλη δυναμικού πίνακα
  • Παράδειγμα: Λάβετε όλες τις τιμές ενός δυναμικού πίνακα

Χρήση της διαδρομής X για τον εντοπισμό στοιχείων πίνακα Web

Πριν εντοπίσουμε το στοιχείο ιστού, πρώτα ας καταλάβουμε-

Τι είναι το στοιχείο ιστού;

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

Για παράδειγμα,

Το πρώτο μου έγγραφο HTML

.

Βήματα για τη λήψη X-path του στοιχείου ιστού που θέλουμε να εντοπίσουμε.

Βήμα 1) Στο Chrome, μεταβείτε στη διεύθυνση http://demo.guru99.com/test/web-table-element.php

Βήμα 2) Κάντε δεξί κλικ στο στοιχείο ιστού του οποίου πρόκειται να ληφθεί η διαδρομή x. Στην περίπτωσή μας, κάντε δεξί κλικ στην επιλογή "Εταιρεία" Επιλέξτε Επιθεώρηση. Θα εμφανιστεί η ακόλουθη οθόνη -

Βήμα 3) Κάντε δεξί κλικ στο επισημασμένο στοιχείο ιστού> Επιλέξτε Αντιγραφή -> Επιλογή αντιγραφής x-path.

Βήμα 4) Χρησιμοποιήστε την αντιγραμμένη διαδρομή X "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" στο Selenium WebDriver για να εντοπίσετε το στοιχείο.

Παράδειγμα: Λήψη αριθμού σειρών και στηλών από το Dynamic WebTable

Ενώ ο δυναμικός χειρισμός πινάκων Ιστού στο Σελήνιο, δεν μπορούμε να προβλέψουμε τον αριθμό των σειρών και στηλών του.

Χρησιμοποιώντας το πρόγραμμα οδήγησης ιστού Selenium, μπορούμε να βρούμε

  • Αριθμός σειρών και στηλών πίνακα Ιστού στο Σελήνιο
  • Δεδομένα γραμμής Χ ή στήλης Υ.

Παρακάτω είναι ένα πρόγραμμα για τη λήψη συνολικού αριθμού σειρών και στηλών για το χειρισμό πίνακα ιστού στο Σελήνιο

εισαγωγή java.text.ParseException;εισαγωγή java.util.List;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;δημόσια τάξη Noofrowsandcols {public static void main (String [] args) ρίχνει το ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = νέο ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");// Όχι. ΣτήλεςΛίστα  col = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("Ο αριθμός των cols είναι: + col.size ());// Όχι. Από σειρέςΛίστα  σειρές = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Ο αριθμός των σειρών είναι: + rows.size ()); wd.close (); }}  

Επεξήγηση κώδικα:

  • Εδώ έχουμε δηλώσει για πρώτη φορά το αντικείμενο προγράμματος οδήγησης Web "wd" και το αρχικοποιήσαμε στο πρόγραμμα οδήγησης Chrome.
  • Χρησιμοποιούμε τη λίστα για τον συνολικό αριθμό στηλών στο "col".
  • Οι εντολές findElements επιστρέφουν μια λίστα ΟΛΩΝ των στοιχείων που ταιριάζουν με τον καθορισμένο εντοπιστή
  • χρησιμοποιώντας το findElements και το X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th παίρνουμε όλες τις στήλες
  • Ομοίως, επαναλαμβάνουμε τη διαδικασία για σειρές.

Παραγωγή:

Παράδειγμα: Ανάκτηση τιμής κελιού μιας συγκεκριμένης σειράς και στήλης του Δυναμικού πίνακα

Ας υποθέσουμε ότι χρειαζόμαστε την σειρά του πίνακα και τα δεδομένα του δεύτερου κελιού του. Δείτε τον παρακάτω πίνακα-

Στον παραπάνω πίνακα, τα δεδομένα ενημερώνονται τακτικά μετά από κάποιο χρονικό διάστημα. Τα δεδομένα που προσπαθείτε να ανακτήσετε θα διαφέρουν από το παραπάνω στιγμιότυπο οθόνης. Ωστόσο, ο κωδικός παραμένει ο ίδιος. Ακολουθεί ένα δείγμα προγράμματος για να λάβετε τα δεδομένα της 3ης σειράς και της 2 ης στήλης.

εισαγωγή java.text.ParseException;εισαγωγή java.util.List;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;εισαγωγή java.util.concurrent.TimeUnit;δημόσια τάξη RowandCell {public static void main (String [] args) ρίχνει το ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = νέο ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");wd.manage (). timeouts (). implicitlyWait (20, TimeUnit.SECONDS);WebElement baseTable = wd.findElement (By.tagName ("πίνακας"));// Για να βρείτε την τρίτη σειρά πίνακαWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));String rowtext = tableRow.getText ();System.out.println ("Τρίτη σειρά πίνακα: + rowtext);// για λήψη δεδομένων 2ης στήλης της 3ης σειράςWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));String valueIneed = cellIneed.getText ();System.out.println ("Η τιμή κελιού είναι: + valueIneed);wd.close ();}}

Επεξήγηση κώδικα:

  • Ο πίνακας βρίσκεται χρησιμοποιώντας την ιδιότητα εντοπισμού "tagname".
  • Χρησιμοποιώντας το XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]" βρείτε την σειρά και παίρνει το κείμενό της χρησιμοποιώντας τη συνάρτηση getText ()
  • Χρησιμοποιώντας το Xpath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]" βρείτε το 2ο κελί στη σειρά και παίρνει το κείμενό του χρησιμοποιώντας τη συνάρτηση getText ()

Έξοδος :

Παράδειγμα: Λάβετε το μέγιστο όλων των τιμών σε μια στήλη δυναμικού πίνακα

Σε αυτό το παράδειγμα, θα λάβουμε το μέγιστο όλων των τιμών σε μια συγκεκριμένη στήλη.

Ανατρέξτε στον παρακάτω πίνακα -

Εδώ είναι ο κωδικός

εισαγωγή java.text.ParseException;εισαγωγή java.util.List;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;εισαγωγή java.text.NumberFormat;δημόσια τάξη MaxFromTable {public static void main (String [] args) ρίχνει το ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = νέο ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");Μέγιστη συμβολοσειρά;διπλό m = 0, r = 0;//Οχι. των στηλώνΛίστα  col = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Ο συνολικός αριθμός των στηλών είναι: + col.size ());// Όχι. Από σειρέςΛίστα  rows = wd.findElements (By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println ("Συνολικός αριθμός σειρών είναι: + rows.size ()); για (int i = 1; i  r) {r = m; }} System.out.println ("Η μέγιστη τρέχουσα τιμή είναι: + r); }}  

Επεξήγηση κώδικα:

  • Χρησιμοποιώντας το πρόγραμμα οδήγησης chrome εντοπίζουμε τον πίνακα ιστού και λαμβάνουμε συνολικό αριθμό σειρών χρησιμοποιώντας το XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
  • Χρησιμοποιώντας για βρόχο, επαναλαμβάνουμε τον συνολικό αριθμό γραμμών και τις τιμές ανάκτησης μία προς μία. Για να πάρουμε την επόμενη σειρά χρησιμοποιούμε (i + 1) στο XPath
  • Συγκρίνουμε την παλιά τιμή με τη νέα τιμή και η μέγιστη τιμή εκτυπώνεται στο τέλος του βρόχου

Παραγωγή

Παράδειγμα: Λάβετε όλες τις τιμές ενός δυναμικού πίνακα

Σκεφτείτε τον παρακάτω πίνακα http://demo.guru99.com/test/table.html

Ο αριθμός στηλών για κάθε σειρά είναι διαφορετικός.

Εδώ η σειρά 1, 2 και 4 έχει 3 κελιά και η σειρά 3 έχει 2 κελιά και η σειρά 5 έχει 1 κελί.

Πρέπει να λάβουμε τιμές όλων των κελιών

Εδώ είναι ο κωδικός:

εισαγωγή java.text.ParseException;εισαγωγή java.util.List;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή java.util.concurrent.TimeUnit;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;δημόσια τάξη NofRowsColmns {public static void main (String [] args) ρίχνει το ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = νέο ChromeDriver ();wd.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// Για να εντοπίσετε τον πίνακα.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// Για να εντοπίσετε σειρές πίνακα.Λίστα  rows_table = mytable.findElements (By.tagName ("tr"));// Για τον υπολογισμό των σειρών στον πίνακα.int rows_count = rows_table.size ();// Ο βρόχος θα εκτελεστεί μέχρι την τελευταία σειρά του τραπεζιού.για (int row = 0; row  Columns_row = rows_table.get (σειρά) .findElements (By.tagName ("td"));// Για τον υπολογισμό του αριθμού στηλών (κελιά). Σε αυτήν τη συγκεκριμένη σειρά.int columns_count = Columns_row.size ();System.out.println ("Αριθμός κελιών στη σειρά" + σειρά + "είναι" + columns_count);// Ο βρόχος θα εκτελεστεί μέχρι το τελευταίο κελί της συγκεκριμένης σειράς.για (int στήλη = 0; στήλη 

Επεξήγηση κώδικα:

  • rows_count δίνει τον συνολικό αριθμό σειρών
  • για κάθε σειρά λαμβάνουμε τον συνολικό αριθμό στηλών χρησιμοποιώντας rows_table.get (σειρά) .findElements (By.tagName ("td"));
  • Επαναλαμβάνουμε κάθε στήλη και κάθε σειρά και λαμβάνουμε τιμές.

Έξοδος :

Περίληψη

  • Το By.xpath () χρησιμοποιείται συνήθως για πρόσβαση σε στοιχεία πίνακα.
  • Οι στατικοί πίνακες ιστού στο Σελήνιο έχουν συνεπή φύση. δηλαδή έχουν σταθερό αριθμό σειρών καθώς και δεδομένα κυττάρων.
  • Οι δυναμικοί πίνακες ιστού είναι ασυνεπείς, δηλαδή δεν έχουν σταθερό αριθμό σειρών και δεδομένων κελιών.
  • Χρησιμοποιώντας το πρόγραμμα οδήγησης ιστού σεληνίου, μπορούμε να χειριστούμε εύκολα δυναμικούς πίνακες ιστού.
  • Το Selenium Webdriver μας επιτρέπει να αποκτήσουμε πρόσβαση σε δυναμικούς πίνακες Ιστού με το X-path τους

Το άρθρο συνεισφέρει ο Kanchan Kulkarni.