Εντοπίστε στοιχεία κατά Κείμενο Συνδέσμου & Κείμενο Μερικού συνδέσμου μέσα Selenium

Τι είναι το Κείμενο Συνδέσμου Selenium?

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

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

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

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

Πλήρες κείμενο συνδέσμου σε Selenium – By.linkText()

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

Σύνδεση κειμένου σε Selenium–By.LinkText()

Σύνδεση κειμένου σε Selenium–By.LinkText()

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

Σύνδεση κειμένου σε Selenium–By.LinkText()

Κώδικας:

import org.openqa.selenium.By;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.chrome.ChromeDriver;		

public class MyClass {				
    		
    public static void main(String[] args) {									
        String baseUrl = "http://demo.guru99.com/test/link.html";					
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");					
        WebDriver driver = new ChromeDriver();					
        		
        driver.get(baseUrl);					
        driver.findElement(By.linkText("click here")).click();					
        System.out.println("title of page is: " + driver.getTitle());							
        driver.quit();			
    }		

}			

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

Σύνδεση κειμένου σε Selenium–By.LinkText()

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

Σύνδεση κειμένου σε Selenium–By.LinkText()

Ολοκληρώστε το κείμενο μερικού συνδέσμου σε Selenium – By.partialLinkText()

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

Κείμενο μερικού συνδέσμου μέσα Selenium – By.partialLinkText()

Κείμενο μερικού συνδέσμου μέσα Selenium – By.partialLinkText()

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

Κείμενο μερικού συνδέσμου μέσα Selenium – By.partialLinkText()

Κώδικας:

import org.openqa.selenium.By;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.chrome.ChromeDriver;		

public class P1 {				
    		
    public static void main(String[] args) {									
        String baseUrl = "http://demo.guru99.com/test/accessing-link.html";					
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");					
        WebDriver driver = new ChromeDriver();					
        		
        driver.get(baseUrl);					
        driver.findElement(By.partialLinkText("here")).click();					
        System.out.println("Title of page is: " + driver.getTitle());							
        driver.quit();			
    }		
}

Κείμενο μερικού συνδέσμου μέσα Selenium – By.partialLinkText()

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

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

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

Πιο συχνά χρησιμοποιείται είναι η By.xpath(). Είναι το πιο αξιόπιστο αλλά φαίνεται complex και μη-readable πάρα πολύ.

Διάκριση πεζών-κεφαλαίων για κείμενο συνδέσμου

Ευαισθησία πεζών-κεφαλαίων για κείμενο συνδέσμου

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

Ευαισθησία πεζών-κεφαλαίων για κείμενο συνδέσμου

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

Ευαισθησία πεζών-κεφαλαίων για κείμενο συνδέσμου

Κώδικας

public static void main(String[] args) {								
        String baseUrl = "http://demo.guru99.com/test/newtours/";					
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");					
        WebDriver driver = new ChromeDriver();					
        		
        driver.get(baseUrl);					
        String theLinkText = driver.findElement(By					
                .partialLinkText("egis"))			
                .getText();		
        System.out.println(theLinkText);					
        theLinkText = driver.findElement(By					
                .partialLinkText("EGIS"))			
                .getText();		
        System.out.println(theLinkText);					

        driver.quit();			

    }

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

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

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

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

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

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

Κώδικας:

import org.openqa.selenium.By;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.chrome.ChromeDriver;		

public class MyClass {				
    		
    public static void main(String[] args) {									
        String baseUrl = "http://demo.guru99.com/test/block.html";					
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");					
        WebDriver driver = new ChromeDriver();					
        		
        driver.get(baseUrl);					
        driver.findElement(By.partialLinkText("Inside")).click();					
        System.out.println(driver.getTitle());					
        driver.navigate().back();			
        driver.findElement(By.partialLinkText("Outside")).click();					
        System.out.println(driver.getTitle());					
        driver.quit();			
    }		
}		

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

Χαρακτηριστικά

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