如何在 Selenium 中处理警报和弹出窗口?
Selenium 中的 Alert 是什么?
Selenium 中的 Alert 是屏幕上出现的一个小消息框,用于向用户提供一些信息或通知。它会通知用户一些特定信息或错误,请求执行某些任务的权限,并提供警告消息。
在本教程中,我们将学习如何处理 Selenium 中的弹出窗口以及在 Web 应用程序测试中发现的不同类型的 Alert。我们还将了解如何在 Selenium WebDriver 中处理 Alert,并学习如何根据 Alert 类型接受和拒绝 Alert。
Selenium 中 Alert 的类型
1) 简单 Alert
Selenium 中的简单 Alert 类在屏幕上显示一些信息或警告。
2) 提示 Alert
此提示 Alert 要求用户输入一些内容,Selenium webdriver 可以使用 sendkeys(” input…. “) 输入文本。
3) 确认 Alert
此确认 Alert 请求执行某种操作的权限。
如何在 Selenium WebDriver 中处理 Alert
Alert 接口提供了以下几个在 Selenium Webdriver 中广泛使用的方法。
1) void dismiss() // 用于点击 Alert 的“取消”按钮。
driver.switchTo().alert().dismiss();
2) void accept() // 用于点击 Alert 的“确定”按钮。
driver.switchTo().alert().accept();
3) String getText() // 用于捕获 Alert 消息。
driver.switchTo().alert().getText();
4) void sendKeys(String stringToSend) // 用于向 Alert 框发送数据。
driver.switchTo().alert().sendKeys("Text");
如 Eclipse 建议的屏幕所示,您可以看到许多 Alert 方法。
我们可以使用 Selenium 的 .switchTo() 方法轻松地从主窗口切换到 Alert。
现在我们自动化下面的场景。
在此场景中,我们将使用 Guru99 演示站点来演示 Selenium Alert 处理。
步骤 1) 启动 Web 浏览器并打开站点 https://demo.guru99.com/test/delete_customer.php
步骤 2) 输入任何客户 ID。
步骤 3) 输入客户 ID 后,点击“提交”按钮。
步骤 4) 拒绝/接受 Alert。
在 Selenium Webdriver 中处理 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 { System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); // Alert Message handling driver.get("https://demo.guru99.com/test/delete_customer.php"); driver.findElement(By.name("cusid")).sendKeys("53920"); driver.findElement(By.name("submit")).submit(); // Switching to Alert Alert alert = driver.switchTo().alert(); // Capturing alert message. String alertMessage= driver.switchTo().alert().getText(); // Displaying alert message System.out.println(alertMessage); Thread.sleep(5000); // Accepting alert alert.accept(); } }
输出
执行上述代码时,它会启动站点。尝试通过处理屏幕上显示的确认 Alert 来删除客户 ID,从而从应用程序中删除客户 ID。
如何使用 Selenium Webdriver 处理弹出窗口
在自动化中,当任何 Web 应用程序中有多个窗口时,可能需要在一个窗口之间切换控制,以完成操作。操作完成后,它必须返回到主窗口,即 Selenium 中的父窗口。我们将在本文中通过示例进一步探讨这一点。
在 Selenium Webdriver 中,有一些方法可以处理多个窗口。
Driver.getWindowHandles();
为了处理 Web 驱动程序打开的所有窗口,我们可以使用“Driver.getWindowHandles()”,然后我们可以在 Web 应用程序中从一个窗口切换到另一个窗口。它的返回类型是 Iterator<String>。
Driver.getWindowHandle();
当站点打开时,我们需要通过 driver.getWindowHandle() 处理主窗口。这将处理当前窗口,该窗口在该驱动程序实例中唯一标识它。它的返回类型是 String。
为了在 Selenium 中处理窗口,我们将遵循以下步骤
现在,我们将自动化以下场景,以了解如何使用 Selenium Webdriver 处理多个窗口。
在此场景中,我们将使用“Guru99”演示站点来演示窗口处理。
步骤 1) 启动站点。
启动浏览器并打开站点 https://demo.guru99.com/popup.php
步骤 2) 点击链接“点击此处”。
当用户点击“点击此处”链接时,会打开一个新的子窗口。
步骤 3) 新的子窗口打开。
一个新的窗口打开,要求用户输入电子邮件 ID 并提交页面。
步骤 4) 输入您的电子邮件 ID 并提交。
步骤 5) 提交页面时显示访问凭据。
执行代码时,您会看到子窗口在新选项卡中打开。
- 关闭显示凭据的子窗口。
- 切换到父窗口。
如何在 Selenium 中处理多个窗口
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 { WebDriver driver=new FirefoxDriver(); //Launching the site. 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(); // To handle all new opened window. Set<String> s1=driver.getWindowHandles(); Iterator<String> i1=s1.iterator(); while(i1.hasNext()) { String ChildWindow=i1.next(); if(!MainWindow.equalsIgnoreCase(ChildWindow)) { // Switching to Child window driver.switchTo().window(ChildWindow); driver.findElement(By.name("emailid")) .sendKeys("gaurav.3n@gmail.com"); driver.findElement(By.name("btnLogin")).click(); // Closing the Child Window. driver.close(); } } // Switching to Parent window i.e Main Window. driver.switchTo().window(MainWindow); } }
输出
执行上述代码时,它会启动站点,点击“点击此处”链接后,会在新选项卡中打开一个子窗口。操作完全完成后,您可以关闭子窗口并切换到父窗口。因此,应用程序中可以处理多个窗口。

结论
- 我们定义了 Alert 的类型,并用屏幕截图展示了它们。
- 演示了使用特定场景通过 Selenium WebDriver 处理 Alert。
- 演示了使用特定场景通过 Selenium WebDriver 处理多个窗口。