Cách xử lý cảnh báo và cửa sổ bật lên trong Selenium?

⚡ Tóm tắt thông minh

Thông báo và cửa sổ bật lên trong Selenium đang JavaCác hộp thoại kịch bản và cửa sổ con chặn luồng tự động hóa. Bài viết này giải thích cách xác định các cảnh báo đơn giản, nhắc nhở và xác nhận, chuyển đổi giữa chúng bằng WebDriver và quản lý nhiều cửa sổ bằng cách sử dụng getWindowHandles().

  • 🔔 Định nghĩa cốt lõi: A Selenium cảnh báo là một JavaHộp thoại kịch bản được hiển thị phía trên trang và cần được xử lý trước khi thực hiện các hành động tiếp theo.
  • 🗂️ Ba loại cảnh báo: Các tùy chọn Simple (thông tin), Prompt (nhập văn bản) và Confirmation (Có/Không) đều yêu cầu các lệnh gọi WebDriver khác nhau.
  • 🛠️ API cảnh báo: Sử dụng driver.switchTo().alert() với accept(), dismiss(), getText() và sendKeys() để tương tác với hộp thoại.
  • 🪟 Xử lý cửa sổ: getWindowHandle() trả về ID của cửa sổ hiện tại; getWindowHandles() trả về toàn bộ tập hợp ID để chuyển đổi.
  • 🚀 Selenium Lưu ý 4: Selenium Trình quản lý tự động giải quyết các trình điều khiển, loại bỏ sự cần thiết phải mã hóa cứng đường dẫn chromedriver.exe.
  • 🤖 Hỗ trợ AI: Các tác nhân AI tạo ra các kịch bản cảnh báo và cửa sổ có nhận biết vị trí, giảm thiểu công việc thủ công trong các bộ kiểm thử.

Cách xử lý cảnh báo và cửa sổ bật lên trong Selenium

Thông báo trong Selenium?

An Cảnh báo trong Selenium là một nhỏ JavaHộp thoại kịch bản xuất hiện trên màn hình để cung cấp cho người dùng một số thông tin hoặc thông báo. Nó có thể xác nhận một hành động cụ thể, yêu cầu quyền thực hiện một thao tác hoặc hiển thị một thông báo cảnh báo.

Trong hướng dẫn này, bạn sẽ học cách xử lý cửa sổ bật lên trong Selenium và các loại cảnh báo khác nhau được tìm thấy trong ứng dụng web thử nghiệmChúng ta cũng sẽ xem cách xử lý cảnh báo trong... Selenium WebDriver và cách chấp nhận hoặc từ chối nó tùy thuộc vào loại cảnh báo.

Các loại cảnh báo trong Selenium

JavaĐoạn mã hiển thị ba hộp thoại cảnh báo mà... Selenium Phải xử lý theo cách khác.

1) Simple Alert

Thông báo đơn giản hiển thị thông tin hoặc cảnh báo trên màn hình. Người dùng chỉ có thể xác nhận bằng cách nhấp chuột. OK.

Ví dụ đơn giản về hộp thoại cảnh báo trong trình duyệt

2) Prompt Alert

Thông báo nhắc nhở yêu cầu người dùng nhập thông tin. Selenium WebDriver có thể nhập dữ liệu vào đó bằng cách sử dụng sendKeys("input...").

Hộp thoại cảnh báo nhắc nhở với trường nhập liệu

3) Confirmation Alert

Thông báo xác nhận yêu cầu người dùng chấp thuận hoặc hủy bỏ một thao tác. Nó hiển thị cả hai khía cạnh. OKHủy bỏ nút.

Hộp thoại xác nhận với các nút OK và Cancel

Cách xử lý cảnh báo trong Selenium webdriver

Alert giao diện trong Selenium webdriver Trình bày bốn phương pháp bao quát mọi tương tác cảnh báo.

  1. bỏ qua() — nhấp chuột vào Hủy bỏ .
driver.switchTo().alert().dismiss();
  1. vô hiệu chấp nhận() — nhấp chuột vào OK .
driver.switchTo().alert().accept();
  1. Chuỗi getText() — Ghi lại thông báo cảnh báo.
driver.switchTo().alert().getText();
  1. void sendKeys(Chuỗi stringToSend) — Nhập văn bản vào ô nhắc nhở.
driver.switchTo().alert().sendKeys("Text");

Eclipse Tính năng tự động hoàn thành hiển thị các phương thức cảnh báo có sẵn sau khi nhậpping alert. trên dòng trình soạn thảo. Chuyển đổi từ cửa sổ chính sang cửa sổ cảnh báo bất cứ lúc nào bằng cách sử dụng Selenium'S .chuyển sang() phương pháp.

Eclipse Tính năng tự động hoàn thành hiển thị các phương pháp xử lý cảnh báo

Ví dụ minh họa: Xóa bản demo khách hàng

Chúng ta hãy tự động hóa kịch bản sau. Chúng ta sẽ sử dụng... GuruTrang web demo 99 để minh họa Selenium Xử lý cảnh báo.

Bước 1) Khởi động trình duyệt và mở https://demo.guru99.com/test/delete_customer.php.

Bước 2) Nhập bất kỳ Mã khách hàng nào.

Trang demo Xóa Khách hàng với trường ID Khách hàng

Bước 3) Nhấn vào Gửi .

Nút gửi để kích hoạt thông báo xác nhận

Bước 4) Chấp nhận hoặc bỏ qua thông báo xác nhận.

Thông báo xác nhận được kích hoạt bởi thao tác xóa

Selenium Java Code: Xử lý Confirmation Alert

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

public class AlertDemo {

    public static void main(String[] args) throws NoAlertPresentException, InterruptedException {
        // Selenium 4 ships Selenium Manager, so an explicit driver path is no longer required.
        WebDriver driver = new ChromeDriver();

        // Open the Delete Customer demo page
        driver.get("https://demo.guru99.com/test/delete_customer.php");

        driver.findElement(By.name("cusid")).sendKeys("53920");
        driver.findElement(By.name("submit")).submit();

        // Switch to the confirmation alert
        Alert alert = driver.switchTo().alert();

        // Capture the alert message
        String alertMessage = alert.getText();
        System.out.println(alertMessage);
        Thread.sleep(5000);

        // Accept the alert
        alert.accept();

        driver.quit();
    }
}

Đầu ra: Trình duyệt mở trang Xóa Khách hàng, nhập ID khách hàng, chấp nhận thông báo xác nhận và xóa bản ghi khỏi ứng dụng demo.

Cách xử lý cửa sổ bật lên Windows in Selenium webdriver

Khi quá trình tự động hóa phải hoạt động trên nhiều cửa sổ trình duyệt, bài kiểm tra phải chuyển tiêu điểm giữa các cửa sổ đó và quay lại cửa sổ chính sau mỗi thao tác. Selenium WebDriver cung cấp hai phương thức giúp thực hiện điều này.

driver.getWindowHandles()

Trả về một Set<String> của mọi tay cầm cửa sổ đang mở. Lặp lại trên tập hợp để chuyển từ cửa sổ chính sang bất kỳ cửa sổ con nào trong ứng dụng.

driver.getWindowHandle()

Trả về một String Với mã định danh duy nhất của cửa sổ hiện tại. Hãy chụp lại mã này trước khi mở bất kỳ cửa sổ con nào để bạn có thể quay lại cửa sổ cha sau này.

Hãy làm theo các bước sau để minh họa cách xử lý cửa sổ. GuruBản demo 99 cửa sổ bật lên.

Ví dụ minh họa: Chuyển đổi cửa sổ

Bước 1) Khởi động trình duyệt và mở https://demo.guru99.com/popup.php.

GuruTrang đích demo 99 cửa sổ bật lên

Bước 2) Nhấn vào Bấm vào đây Liên kết. Một cửa sổ con mới sẽ mở ra.

Cửa sổ dành cho trẻ em mở từ liên kết "Nhấp vào đây"

Bước 3) Cửa sổ con sẽ yêu cầu người dùng nhập địa chỉ email và gửi đi.

Biểu mẫu nhập email cửa sổ con

Bước 4) Nhập địa chỉ email và gửi.

Gửi email bên trong cửa sổ con

Bước 5) Trang này hiển thị thông tin đăng nhập được trả về từ bản demo.

Thông tin đăng nhập được hiển thị trong cửa sổ con.

Sau khi thông tin đăng nhập được hiển thị:

  1. Đóng cửa sổ con.

Đóng cửa sổ con trong trình duyệt

  1. Chuyển tiêu điểm trở lại cửa sổ chính.

Chuyển tiêu điểm trở lại cửa sổ chính

Selenium Java Code: Xử lý nhiều Windows

import java.util.Iterator;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class WindowHandle_Demo {

    public static void main(String[] args) throws InterruptedException {
        // Selenium 4 auto-resolves the browser driver via Selenium Manager
        WebDriver driver = new FirefoxDriver();

        driver.get("https://demo.guru99.com/popup.php");
        driver.manage().window().maximize();

        driver.findElement(By.xpath("//*[contains(@href,'popup.php')]")).click();

        String mainWindow = driver.getWindowHandle();

        // Capture every open window handle
        Set<String> allWindows = driver.getWindowHandles();
        Iterator<String> iterator = allWindows.iterator();

        while (iterator.hasNext()) {
            String childWindow = iterator.next();

            if (!mainWindow.equalsIgnoreCase(childWindow)) {
                // Switch to the child window
                driver.switchTo().window(childWindow);
                driver.findElement(By.name("emailid")).sendKeys("gaurav.3n@gmail.com");
                driver.findElement(By.name("btnLogin")).click();

                // Close the child window
                driver.close();
            }
        }
        // Return focus to the main window
        driver.switchTo().window(mainWindow);
        driver.quit();
    }
}

Đầu ra: Trang web được ra mắt, Nhấp vào đây Liên kết này sẽ mở một tab con. Selenium Nhập địa chỉ email và gửi đi, đóng cửa sổ con, rồi quay lại cửa sổ chính.

Việc xử lý nhiều cửa sổ đã được hoàn tất trong Selenium

Kết luận

  • Đã định nghĩa ba Selenium Các loại cảnh báo — đơn giản, nhắc nhở và xác nhận — kèm theo ảnh chụp màn hình cho mỗi loại.
  • Đã chứng minh khả năng xử lý cảnh báo bằng WebDriver. Alert Giao diện sử dụng kịch bản xóa khách hàng đang hoạt động.
  • Quản lý nhiều cửa sổ trình duyệt bằng cách bắt giữ các handle. getWindowHandle()getWindowHandles() và chuyển đổi qua lại giữa chúng.

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

Thông báo là một tính năng gốc. JavaHộp thoại kịch bản tạm dừng trang cho đến khi được xử lý. Cửa sổ bật lên là một cửa sổ hoặc tab trình duyệt mới. Thông báo sử dụng switchTo().alert(); cửa sổ bật lên sử dụng switchTo().window() với tay cầm được trả về bởi getWindowHandles().

Ngoại lệ NoAlertPresentException được ném ra khi switchTo().alert() chạy nhưng hiện tại không có thông báo nào được hiển thị. Hãy bao bọc lệnh gọi bằng WebDriverWait cho đến khi ExpectedConditions.alertIsPresent() là true để cho trang có thời gian kích hoạt hộp thoại.

Cửa sổ bật lên xác thực cơ bản không phải là tiêu chuẩn. JavaCảnh báo tập lệnh. Truyền thông tin đăng nhập vào URL (https://user:pass@site.com) hoặc sử dụng Selenium 4. CDP Network.setExtraHTTPHeaders. Đối với cửa sổ bật lên SSO, hãy sử dụng BrowserStack hoặc trình xử lý hasAuthentication đã đăng ký.

Các trợ lý AI như AI Các lập trình viên cộng tác tạo ra các trình xử lý cảnh báo nhận biết vị trí, dự đoán thời gian chờ cần thiết và tái cấu trúc XPath dễ bị lỗi. Chúng cũng soạn thảo các khẳng định cho văn bản cảnh báo và cửa sổ con. URLs, tăng tốc Selenium sáng tạo thử nghiệm.

Đúng vậy. Các nền tảng kiểm thử tự phục hồi sử dụng trí tuệ nhân tạo (AI) để phát hiện các thay đổi DOM, hoán đổi các bộ định vị bị lỗi và điều chỉnh thời gian chờ khi cảnh báo hoặc cửa sổ bật lên thay đổi. Điều này giúp giảm thiểu việc bảo trì. Selenium Các bộ ứng dụng chạy trên giao diện người dùng được cập nhật thường xuyên.

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