9X WebDriver – 处理警报/弹出框

原文: https://javabeginnerstutorial.com/selenium/9x-webdriver-handling-alerts-popup-box/

嗨呀爱好者! 想知道为什么 Selenium WebDriver 中存在警报界面? 好吧,我的朋友,对于您所寻找的信息,仅此帖子即可。 我们将讨论基本上属于三种类型的弹出框-警报框,确认框和提示框。 与往常一样,我们有演示站点来说明这些概念。

注意:

如果网页上出现一个弹出框,则只要不接受或关闭警报,用户就无法对基础页面执行任何操作。 请注意,如果您尝试使用警报访问网页上的任何元素,则可能会碰到“UnhandledAlertException:存在模态对话框”。

1.警报框

一个简单的警报框通常用于将信息传递给用户或发出一些警告。 除非单击“确定”按钮,否则用户无法继续进行操作。

JavaScript 代码:

  1. window.alert("This is a simple alert box! \nYou can't escape from me until you click 'OK'!");

Alert Box

2. 确认框

确认框为用户提供了两个选项,以验证/接受或关闭某些内容。 用户必须单击“确定”或“取消”才能继续。 确认弹出框返回布尔值。 当用户点击“确定”时返回true,而当点击“取消”时返回false

JavaScript code:

  1. window.confirm("Click 'OK' or 'Cancel'.");

Confirm Box

3. 提示框

在我们希望用户输入值的情况下,将使用提示框。 与其他警报框类似,用户必须单击“确定”或“取消”按钮才能继续操作。 提示框在单击“确定”时返回输入值,而在单击“取消”时返回空值。

JavaScript 代码:

  1. window.prompt("Which Selenium Tool do you like the most?","e.g. Selenium IDE");

Prompt Box

希望您现在对基于 Web 的弹出窗口的不同类型有清楚的了解。

处理弹出框:

Selenium WebDriver 尚未提供任何处理这些弹出框的方法。 你相信我刚才说的吗?

哈! 我知道没有骗你的! WebDriver 总是对我们所有问题都有答案。 警报接口org.openqa.selenium.Alert一起提供!

经常使用的一些最有用的方法是:

1. WebDriver switchTo()

这是用于从主窗口切换到弹出窗口或显示的警报的方法。

  1. driver.switchTo().alert();

2. void accept()

此方法用于接受警报。 点击“确定”按钮。

  1. driver.switchTo().alert().accept();

3. void dismiss()

此方法用于消除警报。 点击“取消”按钮。

  1. driver.switchTo().alert().dismiss();

4. String getText()

要使文本显示在弹出框中,请使用此方法,它将文本作为字符串返回。

  1. driver.switchTo().alert().getText();

5. void sendKeys(String textToSend)

此方法用于在显示的弹出框中(通常是提示框)输入特定的String

  1. driver.switchTo().alert().sendKeys(“sampleText”);

场景

让我们来看一个实现这些方法的测试用例,以更深入地了解这些概念,

  1. 打开 Firefox 浏览器
  2. 导航到演示站点
  3. 使用 ID 找到“警告框”按钮
  4. 单击按钮以弹出警报框
  5. 获取警报弹出窗口的显示文本并将其打印到控制台
  6. 接受警报弹出窗口
  7. 使用 ID 找到“确认框”按钮
  8. 单击按钮以确认框弹出
  9. 将警报消息打印到控制台
  10. 关闭确认弹出窗口
  11. 使用 XPath 找到“提示框”按钮
  12. 单击按钮,弹出提示框
  13. 获取提示框消息并将其显示到控制台
  14. 接受提示弹出窗口
  15. 验证 Eclipse IDE 控制台输出屏幕和 JUnit 窗格是否成功

此方案的 JUnit 代码是,

  1. package com.blog.junitTests;
  2. import java.util.concurrent.TimeUnit;
  3. import org.junit.After;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import org.openqa.selenium.Alert;
  7. import org.openqa.selenium.By;
  8. import org.openqa.selenium.WebDriver;
  9. import org.openqa.selenium.WebElement;
  10. import org.openqa.selenium.firefox.FirefoxDriver;
  11. public class PopupBoxes {
  12. // Declaring variables
  13. private WebDriver driver;
  14. private String baseUrl;
  15. @Before
  16. public void setUp() throws Exception {
  17. // Selenium version 3 beta releases require system property set up
  18. System.setProperty("webdriver.gecko.driver", "E:\\Softwares\\"
  19. + "Selenium\\geckodriver-v0.10.0-win64\\geckodriver.exe");
  20. // Create a new instance for the class FirefoxDriver
  21. // that implements WebDriver interface
  22. driver = new FirefoxDriver();
  23. // Implicit wait for 5 seconds
  24. driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
  25. // Assign the URL to be invoked to a String variable
  26. baseUrl = "https://chandanachaitanya.github.io/selenium-practice-site/";
  27. }
  28. @Test
  29. public void testPageTitle() throws Exception {
  30. // Open baseUrl in Firefox browser window
  31. driver.get(baseUrl);
  32. // Locate 'Alert Box' button using id
  33. WebElement alertBoxBtn = driver.findElement(By.id("alertBox"));
  34. // Click the button for alert box popup
  35. alertBoxBtn.click();
  36. // Switch the control to 'Alert Box' popup
  37. Alert alertPopUp = driver.switchTo().alert();
  38. // Print the alert message to console
  39. System.out.println("Alert Box message: " + alertPopUp.getText());
  40. // Accept the alert popup
  41. alertPopUp.accept();
  42. Thread.sleep(5000);
  43. // Locate 'Confirm Box' button using id
  44. WebElement confirmBoxBtn = driver.findElement(By.id("confirmBox"));
  45. // Click the button for confirm box popup
  46. confirmBoxBtn.click();
  47. // Switch control to 'Confirm Box' popup
  48. Alert confirmPopUp = driver.switchTo().alert();
  49. // Dismiss the popup
  50. confirmPopUp.dismiss();
  51. System.out.println("Confirm box popup dismissed!");
  52. Thread.sleep(5000);
  53. // Locate 'Prompt Box' button using XPath
  54. WebElement promptBoxBtn = driver.findElement(By.xpath("/html/body/form/div[4]/div[3]/button"));
  55. // Click the button for prompt box popup
  56. promptBoxBtn.click();
  57. // Switch control to 'Prompt Box' popup
  58. Alert promptPopUp = driver.switchTo().alert();
  59. // Display the prompt message to console
  60. System.out.println(promptPopUp.getText());
  61. // Click 'OK'
  62. promptPopUp.accept();
  63. } //End of @Test
  64. @After
  65. public void tearDown() throws Exception {
  66. // Close the Firefox browser
  67. driver.close();
  68. }
  69. }

代码说明:

1. 为了实例化一个弹出框,我们将必须导入import openqa.selenium.Alert包。

键入上述代码后,“Alert”一词下方会出现一条弯曲的线。 悬停时,蚀将建议所有可能的快速修复。 单击建议导入“警报”包的第一个修补程序。

Import alert package

  1. // Switch the control to 'Alert Box' popup
  2. Alert alertPopUp = driver.switchTo().alert();

该包指定了Alert接口,该界面用于处理基于 Web 的弹出框。

alertPopUp”是为引用显示的弹出窗口而创建的新实例变量。

2. 要将控件从主窗口切换到弹出窗口,

  1. driver.switchTo().alert();

3. 要使文本显示在弹出框中,请在引用所生成警报的实例变量上使用getText()方法。

  1. // Print the alert message to console
  2. System.out.println("Alert Box message: " + alertPopUp.getText());

4. 要接受警报,请使用accept()方法。

  1. // Accept the alert popup
  2. alertPopUp.accept();

5. 要关闭警报,请使用dismiss()方法。

  1. // Dismiss the popup
  2. confirmPopUp.dismiss();

执行结果:

在 JUnit 窗口中,绿色条显示测试用例已成功执行。 控制台窗口显示没有任何错误。 它还按预期显示所有打印的消息。

Alert Eclipse output

是时候练习了,我很快会在另一篇文章中见。 祝你有美好的一天!