Εντοπισμός στοιχείων μέσω συνδέσμου κειμένου & Μερικό κείμενο συνδέσμου στο Selenium Webdriver

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

Anonim

Τι είναι το Κείμενο Σύνδεσης στο Σελήνιο;

Ένα κείμενο συνδέσμου στο Σελήνιο χρησιμοποιείται για τον προσδιορισμό των υπερσυνδέσμων σε μια ιστοσελίδα. Προσδιορίζεται με τη βοήθεια μιας ετικέτας αγκύρωσης. Για τη δημιουργία των υπερσυνδέσμων σε μια ιστοσελίδα, μπορούμε να χρησιμοποιήσουμε μια ετικέτα αγκύρωσης ακολουθούμενη από τον σύνδεσμο Κείμενο.

Σύνδεσμοι που ταιριάζουν με ένα κριτήριο

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

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

Εδώ είναι αυτό που θα μάθετε-

  • Πρόσβαση σε συνδέσμους χρησιμοποιώντας την ακριβή αντιστοίχιση κειμένου: By.linkText ()
  • Πρόσβαση σε συνδέσμους χρησιμοποιώντας μερική αντιστοίχιση κειμένου: By.partialLinkText ()
  • Πώς να λάβετε πολλαπλούς συνδέσμους με το ίδιο κείμενο συνδέσμου
  • Ευαισθησία κεφαλαίου για κείμενο κειμένου
  • Σύνδεσμοι έξω και μέσα σε ένα μπλοκ

Πρόσβαση σε συνδέσμους χρησιμοποιώντας την ακριβή αντιστοίχιση κειμένου: By.linkText ()

Η πρόσβαση στους συνδέσμους χρησιμοποιώντας το ακριβές κείμενο του συνδέσμου γίνεται μέσω της μεθόδου By.linkText () . Ωστόσο, εάν υπάρχουν δύο σύνδεσμοι που έχουν το ίδιο κείμενο συνδέσμου, αυτή η μέθοδος θα έχει πρόσβαση μόνο στον πρώτο. Εξετάστε τον παρακάτω κώδικα HTML

Όταν προσπαθείτε να εκτελέσετε τον κωδικό WebDriver παρακάτω, θα έχετε πρόσβαση στον πρώτο σύνδεσμο "κλικ εδώ"

Κώδικας:

εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;δημόσια τάξη MyClass {Δημόσιο στατικό κενό (String [] args) {String baseUrl = "http://demo.guru99.com/test/link.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Πρόγραμμα οδήγησης WebDriver = νέο ChromeDriver ();driver.get (baseUrl);driver.findElement (By.linkText ("κάντε κλικ εδώ")). κάντε κλικ ();System.out.println ("ο τίτλος της σελίδας είναι: + driver.getTitle ());driver.quit ();}}

Εδώ είναι πώς λειτουργεί-

Ως αποτέλεσμα, θα μεταφερθείτε αυτόματα στο Google.

Πρόσβαση σε συνδέσμους χρησιμοποιώντας μερική αντιστοίχιση κειμένου: By.partialLinkText ()

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

Όταν εκτελείτε τον κωδικό WebDriver παρακάτω, θα μεταφερθείτε στο Google.

Κώδικας:

εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;δημόσια τάξη P1 {Δημόσιο στατικό κενό (String [] args) {String baseUrl = "http://demo.guru99.com/test/accessing-link.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Πρόγραμμα οδήγησης WebDriver = νέο ChromeDriver ();driver.get (baseUrl);driver.findElement (By.partialLinkText ("εδώ")). κάντε κλικ ();System.out.println ("Ο τίτλος της σελίδας είναι: + driver.getTitle ());driver.quit ();}}

Πώς να λάβετε πολλαπλούς συνδέσμους με το ίδιο κείμενο συνδέσμου

Λοιπόν, πώς να ξεπεράσετε το παραπάνω πρόβλημα; Σε περιπτώσεις όπου υπάρχουν πολλοί σύνδεσμοι με το ίδιο κείμενο συνδέσμου και θέλουμε να αποκτήσουμε πρόσβαση στους συνδέσμους διαφορετικούς από τον πρώτο, πώς θα το κάνουμε;

Σε τέτοιες περιπτώσεις, γενικά, χρησιμοποιούνται διαφορετικοί εντοπιστές… By.xpath (), By.cssSelector () ή By.tagName ().

Η πιο συχνά χρησιμοποιούμενη είναι το By.xpath (). Είναι το πιο αξιόπιστο, αλλά φαίνεται περίπλοκο και μη αναγνώσιμο.

Ευαισθησία κεφαλαίου για κείμενο κειμένου

Οι παράμετροι για το By.linkText () και το By.partialLinkText () είναι και οι δύο διάκριση πεζών-κεφαλαίων, πράγμα που σημαίνει ότι έχει σημασία η κεφαλαιοποίηση Για παράδειγμα, στην αρχική σελίδα της Mercury Tours, υπάρχουν δύο σύνδεσμοι που περιέχουν το κείμενο "egis" - ένας είναι ο σύνδεσμος "ΕΓΓΡΑΦΗ" που βρίσκεται στο επάνω μενού και ο άλλος είναι ο σύνδεσμος "Εγγραφή εδώ" που βρίσκεται στο κάτω δεξιό τμήμα της σελίδας.

Αν και οι δύο σύνδεσμοι περιέχουν την ακολουθία χαρακτήρων "egis", ένας είναι η μέθοδος "By.partialLinkText ()" θα έχει πρόσβαση σε αυτούς τους δύο συνδέσμους ξεχωριστά ανάλογα με την κεφαλαιοποίηση των χαρακτήρων. Δείτε το δείγμα κώδικα παρακάτω.

Κώδικας

Δημόσιο στατικό κενό (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Πρόγραμμα οδήγησης WebDriver = νέο ChromeDriver ();driver.get (baseUrl);Συμβολοσειρά theLinkText = driver.findElement (Από.partialLinkText ("egis")).getText ();System.out.println (τοLinkText);theLinkText = driver.findElement (Από.partialLinkText ("EGIS")).getText ();System.out.println (τοLinkText);driver.quit ();}

Σύνδεσμοι έξω και μέσα σε ένα μπλοκ

Το πιο πρόσφατο πρότυπο HTML5 επιτρέπει την τοποθέτηση ετικετών εντός και εκτός ετικετών επιπέδου μπλοκ, όπως

,

ή

. Οι μέθοδοι "By.linkText ()" και "By.partialLinkText ()" μπορούν να έχουν πρόσβαση σε έναν σύνδεσμο που βρίσκεται έξω και εντός αυτών των στοιχείων επιπέδου μπλοκ. Εξετάστε τον παρακάτω κώδικα HTML.

Ο παρακάτω κώδικας WebDriver αποκτά πρόσβαση και στους δύο αυτούς συνδέσμους χρησιμοποιώντας τη μέθοδο By.partialLinkText ().

Κώδικας:

εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;δημόσια τάξη MyClass {Δημόσιο στατικό κενό (String [] args) {String baseUrl = "http://demo.guru99.com/test/block.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Πρόγραμμα οδήγησης WebDriver = νέο ChromeDriver ();driver.get (baseUrl);driver.findElement (By.partialLinkText ("Inside")). κάντε κλικ στο ();System.out.println (driver.getTitle ());driver.navigate (). πίσω ();driver.findElement (By.partialLinkText ("Outside")). κάντε κλικ στο ();System.out.println (driver.getTitle ());driver.quit ();}}

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

Περίληψη

  • Η πρόσβαση στους συνδέσμους γίνεται με τη μέθοδο κλικ ().
  • Εκτός από τους εντοπιστές που είναι διαθέσιμοι για οποιοδήποτε WebElement, οι σύνδεσμοι έχουν επίσης εντοπιστές βάσει κειμένου συνδέσμου:
    • By.linkText () - εντοπίζει τους συνδέσμους με βάση την ακριβή αντιστοίχιση του κειμένου του συνδέσμου που παρέχεται ως παράμετρος.
    • By.partialLinkText () - εντοπίζει συνδέσμους βάσει της μερικής αντιστοίχισης κειμένου του κειμένου του συνδέσμου.
  • Και οι δύο παραπάνω εντοπιστές είναι πεζά.
  • Εάν υπάρχουν πολλοί αγώνες, το By.linkText () και το By.partialLinkText () θα επιλέξουν μόνο τον πρώτο αγώνα. Σε τέτοιες περιπτώσεις όπου υπάρχουν πολλοί σύνδεσμοι με το ίδιο κείμενο συνδέσμου, χρησιμοποιούνται άλλοι εντοπιστές που βασίζονται στο xpath, CSS.
  • Η μέθοδος findElements () & By.tagName ("a") βρίσκει όλα τα στοιχεία στη σελίδα που ταιριάζουν με τα κριτήρια εντοπισμού
  • Οι σύνδεσμοι είναι προσβάσιμοι από το By.linkText () και το By.partialLinkText () είτε βρίσκονται εντός είτε εκτός στοιχείων επιπέδου μπλοκ.