如何处理警报和弹出窗口 Selenium?
⚡ 智能摘要
警报和弹出窗口 Selenium 旨在 Java脚本对话框和子窗口会阻碍自动化流程。本文将介绍如何识别简单提示、提示框和确认框,如何使用 WebDriver 切换到这些提示框,以及如何使用 getWindowHandles() 管理多个窗口。

什么是警报? Selenium?
An 警报在 Selenium 很小 Java屏幕上会弹出一个脚本对话框,用于向用户提供信息或通知。它可以确认特定操作、请求执行操作的权限,或显示警告消息。
在本教程中,您将学习如何处理弹出窗口 Selenium 以及 Web 应用程序中发现的不同类型的警报 测试我们还将了解如何在……中处理警报。 Selenium WebDriver以及如何根据警报类型接受或拒绝它。
警报类型 Selenium
Java脚本会显示三个警告对话框, Selenium 必须区别对待。
1) Simple Alert
简易提示框会在屏幕上显示信息或警告。用户只能通过点击来确认。 OK.
2) Prompt Alert
提示框会要求用户输入信息。 Selenium WebDriver 可以使用它向其中输入内容 sendKeys("input...").
3) Confirmation Alert
确认提示会要求用户批准或取消操作。它同时显示了…… OK 和 取消 按钮。
如何处理警报 Selenium 网络驱动程序
此 Alert 界面 Selenium 网络驱动程序 公开了涵盖所有警报交互的四种方法。
- 无效解雇() — 点击 取消 按钮。
driver.switchTo().alert().dismiss();
- 无效接受() — 点击 OK 按钮。
driver.switchTo().alert().accept();
- 字符串获取文本() — 捕获警报消息。
driver.switchTo().alert().getText();
- 无效 sendKeys (字符串 stringToSend ) — 在提示框中输入文本。
driver.switchTo().alert().sendKeys("Text");
Eclipse 输入 后,自动完成功能会显示可用的提示方式。ping alert. 在编辑器行上。随时使用以下方式从主窗口切换到警报窗口: Selenium“ 。切换到() 方法。
示例:删除客户演示
让我们实现以下场景的自动化。我们将使用 Guru99 个演示站点示例 Selenium 警报处理。
步骤1) 启动浏览器并打开 https://demo.guru99.com/test/delete_customer.php.
步骤2) 请输入任意客户ID。
步骤3) 点击 提交表单 按钮。
步骤4) 接受或忽略出现的确认提示。
Selenium Java Code: 处理 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();
}
}
输出: 浏览器打开“删除客户”页面,提交客户 ID,接受确认提示,并从演示应用程序中删除该记录。
如何处理弹出窗口 Windows in Selenium 网络驱动程序
当自动化需要在多个浏览器窗口中运行时,测试必须在它们之间切换焦点,并在每次操作后返回到父窗口。 Selenium WebDriver 提供了两种方法来实现这一点。
driver.getWindowHandles()
返回一个 Set<String> 获取每个打开的窗口句柄。遍历该集合,以从主窗口切换到应用程序中的任何子窗口。
驱动程序.获取窗口句柄()
返回一个 String 使用当前窗口的唯一句柄。在打开任何子窗口之前捕获此句柄,以便稍后返回父窗口。
请按照以下步骤演示窗口处理 Guru99 弹出式演示。
示例:窗口切换
步骤1) 启动浏览器并打开 https://demo.guru99.com/popup.php.
步骤2) 点击 了解更多 链接。将打开一个新的子窗口。
步骤3) 子窗口提示用户输入电子邮件地址并提交。
步骤4) 输入邮箱地址并提交。
步骤5) 此页面显示演示返回的访问凭据。
显示凭据后:
- 关闭子窗口。
- 将焦点切换回父窗口。
Selenium Java Code处理多个 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();
}
}
输出: 网站上线了, 点击这里 链接会打开一个子标签页, Selenium 输入电子邮件并提交,关闭子窗口,然后返回父窗口。
结语
- 定义了这三个 Selenium 提醒类型——简单提醒、提示提醒和确认提醒——每种类型都附有屏幕截图。
- 演示如何使用 WebDriver 处理警报
Alert使用可正常运行的删除客户场景的界面。 - 通过捕获句柄来处理多个浏览器窗口
getWindowHandle()和getWindowHandles()并在它们之间切换。















