Lớp hành động trong Selenium

⚡ Tóm tắt thông minh

Lớp hành động trong Selenium Ứng dụng này xử lý các sự kiện bàn phím và chuột nâng cao như di chuột, kéo thả, nhấp chuột phải và tổ hợp phím thông qua API Tương tác Người dùng Nâng cao. Hướng dẫn này giải thích về các Hành động và lớp Hành động, các phương thức chính và cách kết hợp nhiều tương tác thành một chuỗi.

  • 🖱️ Mục đích cốt lõi: Lớp Actions tự động hóa các sự kiện phức hợp giữa chuột và bàn phím mà phương thức click() cơ bản không thể thực hiện được.
  • 🔑 Hai lớp: Actions tạo ra sự tương tác; Action lưu trữ chuỗi đã biên dịch để thực thi.
  • 🧱 Xây dựng rồi thực hiện: Nối các phương thức lại với nhau, kết thúc bằng build() và chạy bằng perform().
  • 📋 Các phương pháp chính: moveToElement(), dragAndDrop(), keyDown()/keyUp(), contextClick(), và sendKeys().
  • 🤖 Kích hoạt AI: Các trợ lý AI tạo ra mã lớp Hành động và tự sửa lỗi định vị trong quá trình kiểm tra tương tác.

Hiển thị khi di chuột

Lớp hành động trong Selenium

Lớp hành động trong Selenium Đây là một tính năng tích hợp sẵn để xử lý các sự kiện bàn phím và chuột. Nó hỗ trợ các thao tác như nhấp chuột nhiều lần với phím Control, kéo và thả, và nhiều thao tác khác. Các thao tác này được thực hiện bằng cách sử dụng API Tương tác Người dùng Nâng cao trong Selenium WebDriver.

Xử lý sự kiện bàn phím và chuột

Việc xử lý các sự kiện đặc biệt của bàn phím và chuột được thực hiện bằng cách sử dụng... API tương tác người dùng nâng cao. Nó chứa Hoạt độngHoạt động Các lớp cần thiết để thực thi các sự kiện này. Các sự kiện bàn phím và chuột được sử dụng phổ biến nhất do lớp Actions cung cấp được liệt kê bên dưới.

Phương pháp Mô tả Chi tiết
bấm và giữ() Nhấp chuột (không nhả) tại vị trí chuột hiện tại.
bối cảnhClick() Thực hiện thao tác nhấp chuột phải (nhấp chuột ngữ cảnh) tại vị trí con trỏ chuột hiện tại.
nhấp đúp() Thực hiện nhấp đúp chuột vào vị trí hiện tại của chuột.
dragAndDrop(nguồn, đích) Nhấn giữ chuột vào phần tử nguồn, di chuyển đến phần tử đích, sau đó thả chuột. Tham số: nguồn (phần tử cần nhấn), đích (phần tử cần thả chuột).
dragAndDropBy(nguồn, x-offset, y-offset) Nhấn giữ chuột vào phần tử nguồn, di chuyển một khoảng cách nhất định, sau đó thả chuột. Tham số: nguồn, xOffset (ngang), yOffset (dọc).
keyDown(modifier_key) Nhấn giữ một phím bổ trợ mà không nhả ra, do đó các tương tác sau này sẽ giả định rằng phím đó vẫn được giữ. Tham số: một phím bổ trợ (Keys.ALT, Keys.SHIFT hoặc Keys.CONTROL).
keyUp(modifier_key) Nhả một phím bổ trợ. Tham số: một phím bổ trợ (Keys.ALT, Keys.SHIFT hoặc Keys.CONTROL).
moveByOffset(x-offset, y-offset) Di chuyển con trỏ chuột từ vị trí hiện tại (hoặc 0,0) một khoảng cách nhất định. Giá trị x âm di chuyển sang trái; giá trị y âm di chuyển lên trên.
moveToElement(toElement) Di chuyển chuột đến giữa phần tử. Tham số: phần tử cần di chuyển đến.
phóng thích() Thả nút chuột trái đang được nhấn giữ tại vị trí hiện tại.
sendKeys(onElement, charsequence) Gửi một chuỗi các tổ hợp phím đến một phần tử. Tham số: onElement (thường là trường văn bản), charsequence (chuỗi tổ hợp phím cần gửi).

Trong ví dụ sau, chúng tôi sử dụng moveToElement() phương pháp di chuột qua một trong các mục Mercury Các hàng bàn tham quan.

Xử lý các sự kiện bàn phím và chuột

Tế bào được hiển thị ở trên là một phần của Phần tử này có màu #FFC455 (cam) khi không di chuột qua. Sau khi di chuột, màu của ô trở nên trong suốt và trùng với màu nền của bảng xung quanh.

Bước 1) Nhập Hoạt độngHoạt động các lớp học.

Nhập các hành động và lớp hành động

Bước 2) Khởi tạo một đối tượng Hành động mới.

Khởi tạo đối tượng Actions

Bước 3) Khởi tạo một Action bằng cách sử dụng đối tượng Actions từ Bước 2.

Khởi tạo đối tượng Action

Ở đây chúng tôi sử dụng moveToElement() Phương pháp di chuột qua liên kết “Trang chủ”. build() Phương thức này luôn được gọi cuối cùng để tất cả các hành động được liệt kê đều được gộp lại thành một bước duy nhất.

Bước 4) Sử dụng perform() Phương thức để thực thi đối tượng Hành động được thiết kế ở Bước 3.

Thực hiện hành động

Dưới đây là toàn bộ mã WebDriver kiểm tra màu nền của... Phần tử trước và sau khi di chuột qua.

package newproject;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;

public class PG7 {

    public static void main(String[] args) {
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();

        driver.get(baseUrl);
        WebElement link_Home = driver.findElement(By.linkText("Home"));
        WebElement td_Home = driver.findElement(By.xpath(
            "//html/body/div/table/tbody/tr/td"
            + "/table/tbody/tr/td"
            + "/table/tbody/tr/td"
            + "/table/tbody/tr"));

        Actions builder = new Actions(driver);
        Action mouseOverHome = builder.moveToElement(link_Home).build();

        String bgColor = td_Home.getCssValue("background-color");
        System.out.println("Before hover: " + bgColor);
        mouseOverHome.perform();
        bgColor = td_Home.getCssValue("background-color");
        System.out.println("After hover: " + bgColor);
        driver.close();
    }
}

Kết quả hiển thị bên dưới cho thấy màu nền đã trở nên trong suốt sau khi di chuột qua.

Hiển thị khi di chuột

Xây dựng một chuỗi nhiều hành động

Bạn có thể xây dựng một chuỗi các hành động bằng cách sử dụng các lớp Action và Actions. Hãy nhớ kết thúc chuỗi bằng cách sử dụng phương thức `composer`. build() phương pháp. Hãy xem xét đoạn mã mẫu bên dưới.

Xây dựng một chuỗi nhiều hành động

public static void main(String[] args) {
    String baseUrl = "https://www.facebook.com/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    WebElement txtUsername = driver.findElement(By.id("email"));

    Actions builder = new Actions(driver);
    Action seriesOfActions = builder
        .moveToElement(txtUsername)
        .click()
        .keyDown(txtUsername, Keys.SHIFT)
        .sendKeys(txtUsername, "hello")
        .keyUp(txtUsername, Keys.SHIFT)
        .doubleClick(txtUsername)
        .contextClick()
        .build();

    seriesOfActions.perform();
}

Chuỗi hành động đầu ra

Câu Hỏi Thường Gặp

Lớp Action đại diện cho một chuỗi các tương tác bàn phím và chuột đã được biên dịch, được xây dựng bằng lớp Actions. Nó được thực thi thông qua API Tương tác Người dùng Nâng cao trong Selenium WebDriver.

Actions (số nhiều) là trình tạo được sử dụng để kết nối các tương tác như di chuột và nhấp chuột. Action (số ít) là đối tượng đã được biên dịch trả về bởi build() mà bạn chạy bằng perform().

Hàm build() biên dịch tất cả các tương tác được xâu chuỗi thành một Hành động tổng hợp duy nhất. Nó luôn được gọi cuối cùng, ngay trước hàm perform(), để các bước được xếp hàng thực thi cùng nhau như một chuỗi duy nhất.

Phương thức `perform()` thực thi Action đã được xây dựng trên trình duyệt. Nếu không có nó, các tương tác được xâu chuỗi chỉ được xếp vào hàng đợi và không bao giờ thực sự được gửi đến trang.

Sử dụng moveToElement(element) trên một đối tượng Actions, sau đó gọi build() và perform(). Thao tác này di chuyển con trỏ đến tâm của phần tử và kích hoạt bất kỳ hành vi khi di chuột nào, chẳng hạn như menu thả xuống.

Nó hỗ trợ các thao tác clickAndHold, contextClick, doubleClick, dragAndDrop, dragAndDropBy, keyDown, keyUp, moveByOffset, moveToElement, release và sendKeys — bao gồm hầu hết các tương tác nâng cao.

Các công cụ AI sử dụng bộ định vị tự phục hồi, tự điều chỉnh khi các phần tử thay đổi, giảm thiểu các lỗi không ổn định trong các bài kiểm tra di chuột và kéo thả. Chúng cũng đề xuất các XPath ổn định và tự động thêm các khoảng chờ thông minh.

Đúng vậy. Trợ lý lập trình AI biến một kịch bản đơn giản như "di chuột qua Home rồi nhấp chuột phải" thành một chuỗi Hành động hoạt động với các hàm build() và perform(), đồng thời đề xuất các bộ định vị mạnh mẽ.

Tóm tắt bài viết này với: