Πώς να χειριστείτε τον Πίνακα Web στο Selenium WebDriver

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

Anonim

Διαβάζοντας έναν πίνακα Ιστού HTML

Υπάρχουν στιγμές που πρέπει να έχουμε πρόσβαση σε στοιχεία (συνήθως κείμενα) που βρίσκονται σε πίνακες HTML. Ωστόσο, είναι πολύ σπάνια για έναν σχεδιαστή Ιστού να παρέχει ένα χαρακτηριστικό αναγνωριστικού ή ονόματος σε ένα συγκεκριμένο κελί στον πίνακα. Επομένως, δεν μπορούμε να χρησιμοποιήσουμε τις συνήθεις μεθόδους όπως "By.id ()", "By.name ()" ή "By.cssSelector ()". Σε αυτήν την περίπτωση, η πιο αξιόπιστη επιλογή είναι η πρόσβαση σε αυτά χρησιμοποιώντας τη μέθοδο "By.xpath ()".

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

  • Πώς να γράψετε XPath για πίνακα
  • Πρόσβαση σε ένθετους πίνακες
  • Χρήση χαρακτηριστικών ως Predicates
  • Συντόμευση: Χρησιμοποιήστε το στοιχείο Επιθεώρηση για πρόσβαση σε πίνακες στο Σελήνιο

Πώς να γράψετε XPath για πίνακα

Εξετάστε τον παρακάτω κώδικα HTML.

Θα χρησιμοποιήσουμε το XPath για να πάρουμε το εσωτερικό κείμενο του κελιού που περιέχει το κείμενο "τέταρτο κελί".

Βήμα 1 - Ορίστε το γονικό στοιχείο (πίνακας)

Οι εντοπιστές XPath στο WebDriver ξεκινούν πάντα με μια διπλή κάθετο "//" και στη συνέχεια ακολουθούνται από το γονικό στοιχείο . Δεδομένου ότι έχουμε να κάνουμε με πίνακες, το γονικό στοιχείο πρέπει πάντα να είναι η ετικέτα

. Το πρώτο τμήμα του εντοπισμού XPath θα πρέπει, επομένως, να ξεκινήσει με το "// table".

Βήμα 2 - Προσθέστε τα θυγατρικά στοιχεία

Το στοιχείο ακριβώς κάτω από το

είναι έτσι μπορούμε να πούμε ότι το είναι το "παιδί" του
. Και επίσης, το
είναι το "γονικό" του . Όλα τα θυγατρικά στοιχεία στο XPath τοποθετούνται στα δεξιά του γονικού τους στοιχείου, διαχωρίζονται με μία κάθετο "/" όπως ο κώδικας που φαίνεται παρακάτω.

Βήμα 3 - Προσθήκη Predicates

Το στοιχείο

περιέχει δύο ετικέτες . Μπορούμε τώρα να πούμε ότι αυτές οι δύο ετικέτες είναι "παιδιά" του . Κατά συνέπεια, μπορούμε να πούμε ότι το είναι το γονικό στοιχείο και των δύο στοιχείων .

Ένα άλλο πράγμα που μπορούμε να συμπεράνουμε είναι ότι τα δύο

στοιχεία είναι αδέλφια. Τα αδέλφια αναφέρονται σε παιδικά στοιχεία που έχουν τον ίδιο γονέα .

Για να φτάσετε στο

και όχι στο πρώτο. Εάν απλώς γράψουμε "// table / tbody / tr", τότε θα έχουμε πρόσβαση στην πρώτη ετικέτα .

Λοιπόν, πώς έχουμε πρόσβαση στο δεύτερο

τότε; Η απάντηση σε αυτό είναι να χρησιμοποιήσετε Predicates .

Τα predicates είναι αριθμοί ή χαρακτηριστικά HTML που περικλείονται σε ένα ζευγάρι αγκύλες "[]" που διακρίνουν ένα θυγατρικό στοιχείο από τα αδέλφια του . Δεδομένου ότι το

πρέπει να έχουμε πρόσβαση είναι το δεύτερο, θα χρησιμοποιήσουμε το "[2]" ως βασικό.

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

χρησιμοποιώντας έναν από αυτούς τους κωδικούς XPath.

Βήμα 4 - Προσθέστε τα επιτυχημένα παιδικά στοιχεία χρησιμοποιώντας τις κατάλληλες προδιαγραφές

Το επόμενο στοιχείο στο οποίο πρέπει να έχουμε πρόσβαση είναι το δεύτερο

, και έτσι το XPath πρέπει να είναι όπως φαίνεται παρακάτω.

Θυμηθείτε ότι όταν βάζουμε τον κώδικα XPath στην Java, θα πρέπει να χρησιμοποιήσουμε τον χαρακτήρα διαφυγής "slash" προς τα πίσω για τα διπλά εισαγωγικά και στις δύο πλευρές του "270", ώστε το όρισμα συμβολοσειράς του By.xpath () να μην τερματιστεί πρόωρα .

Είμαστε πλέον έτοιμοι να αποκτήσουμε πρόσβαση σε αυτό το κελί χρησιμοποιώντας τον παρακάτω κώδικα.

Δημόσιο στατικό κενό (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (Από.xpath ("// πίνακας [@width = \" 270 \ "] / tbody / tr [4] / td")).getText ();System.out.println (innerText);driver.quit ();}

Συντόμευση: Χρησιμοποιήστε το στοιχείο Επιθεώρηση για πρόσβαση σε πίνακες στο Σελήνιο

Εάν ο αριθμός ή το χαρακτηριστικό ενός στοιχείου είναι εξαιρετικά δύσκολο ή αδύνατο να ληφθεί, ο γρηγορότερος τρόπος για τη δημιουργία του κώδικα XPath είναι η χρήση του Inspect Element.

Εξετάστε το παρακάτω παράδειγμα από την αρχική σελίδα της Mercury Tours.

Βήμα 1

Χρησιμοποιήστε το Firebug για να αποκτήσετε τον κωδικό XPath.

Βήμα 2

Αναζητήστε το πρώτο γονικό στοιχείο "πίνακα" και διαγράψτε τα πάντα στα αριστερά του.

Βήμα 3

Προσθέστε το υπόλοιπο τμήμα του κώδικα με διπλή κάθετο "//" και αντιγράψτε τον στον κώδικα WebDriver.

Ο παρακάτω κώδικας WebDriver θα μπορεί να ανακτήσει με επιτυχία το εσωτερικό κείμενο του στοιχείου στο οποίο έχουμε πρόσβαση.

Δημόσιο στατικό κενό (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (Από.xpath ("// table / tbody / tr / td [2]"+ "// τραπέζι / tbody / tr [4] / td /"+ "table / tbody / tr / td [2] /"+ "table / tbody / tr [2] / td [1] /"+ "πίνακας [2] / tbody / tr [3] / td [2] / font")).getText ();System.out.println (innerText);driver.quit ();}

Περίληψη

  • Το By.xpath () χρησιμοποιείται συνήθως για πρόσβαση σε στοιχεία πίνακα.
  • Εάν το στοιχείο είναι γραμμένο βαθιά μέσα στον κώδικα HTML έτσι ώστε να είναι πολύ δύσκολο να προσδιοριστεί ο αριθμός που πρέπει να χρησιμοποιηθεί για την κατηγορία, μπορούμε να χρησιμοποιήσουμε το μοναδικό χαρακτηριστικό αυτού του στοιχείου.
  • Τα χαρακτηριστικά χρησιμοποιούνται ως προγνωστικά προθέτοντάς τα με το σύμβολο @.
  • Χρησιμοποιήστε το στοιχείο Επιθεώρηση για πρόσβαση σε πίνακες στο Σελήνιο
στο οποίο θέλουμε να προσπελάσουμε (το ένα με το κείμενο "τέταρτο κελί"), πρέπει πρώτα να αποκτήσουμε πρόσβαση στο δεύτερο
. Εφαρμόζοντας τις αρχές που έχουμε μάθει από τα βήματα 2 και 3, θα οριστικοποιήσουμε τον κώδικα XPath ώστε να είναι όπως αυτός που φαίνεται παρακάτω.

Τώρα που έχουμε τον σωστό εντοπισμό XPath, μπορούμε ήδη να έχουμε πρόσβαση στο κελί στο οποίο θέλαμε και να αποκτήσουμε το εσωτερικό του κείμενο χρησιμοποιώντας τον παρακάτω κώδικα. Υποθέτει ότι έχετε αποθηκεύσει τον κώδικα HTML παραπάνω ως "newhtml.html" στο C Drive σας.

Δημόσιο στατικό κενό (String [] args) {String baseUrl = "http://demo.guru99.com/test/write-xpath-table.html";Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (By.xpath ("// table / tbody / tr [2] / td [2]")). GetText ();System.out.println (innerText);driver.quit ();}}

Πρόσβαση σε ένθετους πίνακες

Οι ίδιες αρχές που αναφέρθηκαν παραπάνω ισχύουν για ένθετους πίνακες. Οι ένθετοι πίνακες είναι πίνακες που βρίσκονται σε έναν άλλο πίνακα . Ένα παράδειγμα φαίνεται παρακάτω.

Για να αποκτήσετε πρόσβαση στο κελί με το κείμενο "4-5-6" χρησιμοποιώντας τις έννοιες "// γονέας / παιδί" και κατηγορίας από την προηγούμενη ενότητα, θα πρέπει να μπορέσουμε να βρούμε τον κωδικό XPath παρακάτω.

Ο παρακάτω κώδικας WebDriver θα πρέπει να μπορεί να ανακτά το εσωτερικό κείμενο του κελιού στο οποίο έχουμε πρόσβαση.

Δημόσιο στατικό κενό (String [] args) {String baseUrl = "http://demo.guru99.com/test/accessing-nested-table.html";Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (By.xpath ("// table / tbody / tr [2] / td [2] / table / tbody / tr / td [2]")). GetText ();System.out.println (innerText);driver.quit ();}

Η έξοδος παρακάτω επιβεβαιώνει ότι η πρόσβαση στον εσωτερικό πίνακα ήταν επιτυχής.

Χρήση χαρακτηριστικών ως Predicates

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

Στο παρακάτω παράδειγμα, το κελί "Νέα Υόρκη προς Σικάγο" βρίσκεται βαθιά στον κώδικα HTML της αρχικής σελίδας της Mercury Tours.

Σε αυτήν την περίπτωση, μπορούμε να χρησιμοποιήσουμε το μοναδικό χαρακτηριστικό του πίνακα (πλάτος = "270") ως predicate. Τα χαρακτηριστικά χρησιμοποιούνται ως προγνωστικά προθέτοντάς τα με το σύμβολο @ . Στο παραπάνω παράδειγμα, το κελί "Νέα Υόρκη προς Σικάγο" βρίσκεται στο πρώτο

του τέταρτου