Văn bản liên kết & Văn bản liên kết một phần trong Selenium

Văn bản liên kết trong là gì Selenium?

A Liên kết văn bản trong Selenium được sử dụng để xác định các siêu liên kết trên một trang web. Nó được xác định với sự trợ giúp của thẻ neo. Để tạo các siêu liên kết trên một trang web, chúng ta có thể sử dụng thẻ liên kết theo sau là Văn bản liên kết.

Liên kết phù hợp với tiêu chí

Các liên kết có thể được truy cập bằng cách sử dụng kết quả khớp chính xác hoặc một phần văn bản liên kết của chúng. Các ví dụ bên dưới cung cấp các tình huống trong đó có nhiều kết quả trùng khớp và sẽ giải thích cách WebDriver xử lý chúng.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu các phương pháp có sẵn để tìm và truy cập Liên kết bằng Webdriver. Ngoài ra, chúng ta sẽ thảo luận về một số vấn đề thường gặp khi truy cập Liên kết và sẽ thảo luận thêm về cách giải quyết chúng.

Hoàn thành văn bản liên kết trong Selenium – By.linkText()

Việc truy cập các liên kết bằng văn bản liên kết chính xác của chúng được thực hiện thông qua phương thức By.linkText(). Tuy nhiên, nếu có hai liên kết có văn bản liên kết giống nhau thì phương pháp này sẽ chỉ truy cập vào liên kết đầu tiên. Hãy xem xét mã HTML bên dưới

Liên kết văn bản trong Selenium–By.LinkText()

Liên kết văn bản trong Selenium–By.LinkText()

Khi bạn cố chạy mã WebDriver bên dưới, bạn sẽ truy cập vào liên kết “nhấp vào đây” đầu tiên

Liên kết văn bản trong Selenium–By.LinkText()

Mã Code:

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 = "https://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();			
    }		

}			

Đây là cách nó làm việc-

Liên kết văn bản trong Selenium–By.LinkText()

Kết quả là bạn sẽ tự động được đưa đến Google.

Liên kết văn bản trong Selenium–By.LinkText()

Hoàn thành văn bản liên kết một phần trong Selenium – By.partialLinkText()

Việc truy cập các liên kết bằng cách sử dụng một phần văn bản liên kết của chúng được thực hiện bằng cách sử dụng By.partialLinkText() phương pháp. Nếu bạn chỉ định một văn bản liên kết một phần có nhiều kết quả phù hợp thì chỉ kết quả phù hợp đầu tiên mới được truy cập. Hãy xem xét mã HTML bên dưới.

Văn bản liên kết một phần trong Selenium – By.partialLinkText()

Văn bản liên kết một phần trong Selenium – By.partialLinkText()

Khi thực thi mã WebDriver bên dưới, bạn vẫn sẽ được đưa tới Google.

Văn bản liên kết một phần trong Selenium – By.partialLinkText()

Mã Code:

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 = "https://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();			
    }		
}

Văn bản liên kết một phần trong Selenium – By.partialLinkText()

Cách nhận được nhiều liên kết với cùng một văn bản liên kết

Vậy làm cách nào để giải quyết vấn đề trên? Trong trường hợp có nhiều liên kết có cùng văn bản liên kết và chúng tôi muốn truy cập các liên kết khác với liên kết đầu tiên, chúng tôi sẽ thực hiện như thế nào?

Trong những trường hợp như vậy, nhìn chung, các định vị khác nhau như… By.xpath(), By.cssSelector() hoặc By.tagName() được sử dụng.

Được sử dụng phổ biến nhất là By.xpath(). Đây là phương pháp đáng tin cậy nhất nhưng trông có vẻ phức tạp và khó đọc.

Phân biệt chữ hoa chữ thường cho văn bản liên kết

Phân biệt chữ hoa chữ thường cho văn bản liên kết

Các tham số cho By.linkText()By.partialLinkText() cả hai đều phân biệt chữ hoa chữ thường, có nghĩa là việc viết hoa rất quan trọng. Ví dụ, trong Mercury Trang chủ của Tours, có hai liên kết chứa nội dung “egis” – một là liên kết “ĐĂNG KÝ” ở menu trên cùng và liên kết còn lại là liên kết “Đăng ký tại đây” ở phần dưới bên phải của trang.

Phân biệt chữ hoa chữ thường cho văn bản liên kết

Mặc dù cả hai liên kết đều chứa chuỗi ký tự “egis”, một liên kết là phương thức “By.partialLinkText()” sẽ truy cập hai liên kết này một cách riêng biệt tùy thuộc vào cách viết hoa của các ký tự. Xem mã mẫu bên dưới.

Phân biệt chữ hoa chữ thường cho văn bản liên kết

public static void main(String[] args) {								
        String baseUrl = "https://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();			

    }

Liên kết bên ngoài và bên trong một khối

Tiêu chuẩn HTML5 mới nhất cho phép các thẻ được đặt bên trong và bên ngoài các thẻ cấp khối như , hoặc . Các phương thức “By.linkText()” và “By.partialLinkText()” có thể truy cập vào một liên kết nằm bên ngoài và bên trong các phần tử cấp khối này. Hãy xem xét mã HTML bên dưới.

Liên kết bên ngoài và bên trong một khối

Liên kết bên ngoài và bên trong một khối

Mã WebDriver bên dưới truy cập cả hai liên kết này bằng phương thức By.partialLinkText().

Liên kết bên ngoài và bên trong một khối

Mã Code:

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 = "https://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();			
    }		
}		

Kết quả ở trên xác nhận rằng cả hai liên kết đều được truy cập thành công vì tiêu đề trang tương ứng của chúng được truy xuất chính xác.

Tổng kết

  • Các liên kết được truy cập bằng phương thức click().
  • Ngoài các công cụ định vị có sẵn cho bất kỳ WebElement nào, Liên kết còn có các công cụ định vị dựa trên văn bản liên kết:
    • By.linkText() – định vị các liên kết dựa trên sự trùng khớp chính xác với văn bản của liên kết được cung cấp dưới dạng tham số.
    • By.partialLinkText() – định vị các liên kết dựa trên sự trùng khớp một phần văn bản với văn bản của liên kết.
  • Cả hai công cụ định vị trên đều phân biệt chữ hoa chữ thường.
  • Nếu có nhiều kết quả khớp, By.linkText() và By.partialLinkText() sẽ chỉ chọn kết quả khớp đầu tiên. Trong những trường hợp có nhiều liên kết có cùng văn bản liên kết, các trình định vị khác dựa trên xpath, CSS sẽ được sử dụng.
  • Phương thức findElements() & By.tagName(“a”) tìm tất cả các phần tử trong trang khớp với tiêu chí của bộ định vị
  • Các liên kết có thể được truy cập bởi By.linkText() và By.partialLinkText() cho dù chúng ở bên trong hay bên ngoài các phần tử cấp khối.