Sử dụng @CacheLookup trong PageObjectModel trong Selenium

Sử dụng @CacheLookup trong PageObjectModel trong Selenium

Trong khi làm việc với Selenium WebDriver, Page Object Model (POM) là một mẫu thiết kế phổ biến giúp tổ chức mã kiểm thử một cách rõ ràng và dễ quản lý. Một trong những khía cạnh quan trọng của POM là việc quản lý các đối tượng WebElement, và trong đó, chú thích @CacheLookup có thể giúp cải thiện hiệu suất của các bài kiểm thử.

I. CacheLookup là gì?

@CacheLookup là một chú thích được cung cấp bởi Selenium để chỉ ra rằng một phần tử web được định vị và lưu trữ (cache) cho các lần sử dụng sau này. Khi một phần tử được chú thích với @CacheLookup, Selenium sẽ không định vị lại phần tử đó mỗi lần nó được truy cập, mà thay vào đó sử dụng phiên bản đã được lưu trữ trước đó.

II. Lợi ích của @CacheLookup

  • Tăng tốc độ kiểm thử: Việc lưu trữ các phần tử giúp giảm thời gian tìm kiếm lại phần tử trên trang web, từ đó tăng tốc độ kiểm thử.
  • Giảm tải cho trang web: Giảm số lượng yêu cầu tìm kiếm phần tử tới trang web, giúp trang web không bị quá tải bởi các yêu cầu kiểm thử liên tục.

III. Cách sử dụng @CacheLookup trong Page Object Model

Dưới đây là một ví dụ về cách sử dụng @CacheLookup trong Page Object Model:

				
					import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.CacheLookup;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class LoginPage {
    WebDriver driver;

    // Sử dụng @CacheLookup để lưu trữ phần tử web
    @FindBy(id = "username")
    @CacheLookup
    WebElement usernameField;

    @FindBy(id = "password")
    @CacheLookup
    WebElement passwordField;

    @FindBy(id = "loginButton")
    @CacheLookup
    WebElement loginButton;

    public LoginPage(WebDriver driver) {
        this.driver = driver;
        // Khởi tạo các phần tử web
        PageFactory.initElements(driver, this);
    }

    public void login(String username, String password) {
        usernameField.sendKeys(username);
        passwordField.sendKeys(password);
        loginButton.click();
    }
}

				
			
  • @CacheLookup được sử dụng để lưu trữ các phần tử usernameField, passwordField, và loginButton.
  • Các phần tử này chỉ được định vị một lần duy nhất và sau đó được lưu trữ để sử dụng lại mà không cần phải tìm kiếm lại mỗi khi chúng được truy cập.

IV. Khi nào nên (và không nên) sử dụng @CacheLookup

  • Nên sử dụng:
    • Khi bạn chắc chắn rằng các phần tử sẽ không thay đổi hoặc bị làm mới trong suốt vòng đời của trang.
    • Khi cần tối ưu hóa hiệu suất của bài kiểm thử.
  • Không nên sử dụng:
    • Khi các phần tử có thể thay đổi hoặc bị làm mới (refresh) trong suốt vòng đời của trang.
    • Khi trang web có các yếu tố động, và phần tử có thể không còn tồn tại hoặc thay đổi vị trí.