Selenium 简明教程

Selenium WebDriver - Alerts & Popups

Selenium Webdriver 可用于处理警报和弹出窗口。网页上的警报旨在显示警告消息或信息,或获取用户的授权以进行进一步的操作。

Selenium Webdriver can be used to handle alerts and popups. An alert on a web page is designed to show a warning message, or information, or to get the user authorization to proceed for further actions.

Basic Methods to Handle Alerts & Popups in Selenium

Selenium 中提供了多种方法,可用于基于警报和弹出窗口使测试实现自动化。要访问警报,我们必须首先使用 switchTo().alert() 方法将驱动程序上下文切换到警报。让我们详细讨论 Alert 接口的一些方法 −

There are multiple methods available in Selenium that can enable us to automate tests based on alerts and popups. For accessing the alerts, we have to first switch the driver context to the alert using the switchTo().alert() method. Let us discuss in details some of the methods of the Alert interface −

  1. driver.switchTo().alert().accept() − This is used to accept an alert by clicking on the Ok button appearing on an alert.

  2. driver.switchTo().alert().dismiss() − This is used to dismiss an alert by clicking on the Cancel button appearing on an alert.

  3. driver.switchTo().alert().getText() − This is used to get the text appearing on an alert.

  4. driver.switchTo().alert().sendKeys("value to be entered") − This is used to enter some text appearing on an input text appearing on an alert.

请注意,在使用 Alert 接口时,我们需要在测试中添加导入语句 import org.openqa.selenium.Alert

Please note that, while using the Alert interface, we would need to add the import statement import org.openqa.selenium.Alert in our tests.

Example 1 - Alerts

让我们讨论一下网页上常见的警报。单击页面上的 Alert 按钮时,将会生成警报,其文本为 - Hello world! ,如下所示。

Let us discuss a normal alert on a web page. On clicking the Alert button on the page, an alert would be generated with the text - Hello world! as shown in the below image.

selenium alerts popups 1

代码实现

Code Implementation

package org.example;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;

public class Alrts {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // adding implicit wait of 12 secs
      driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);

      // Opening the webpage where we will get alert
      driver.get("https://www.tutorialspoint.com/selenium/practice/alerts.php");

      // identify button for clicking to get alert
      WebElement c = driver.findElement(By.xpath("//button[text()='Alert']"));
      c.click();

      // switch driver context to alert
      Alert alrt = driver.switchTo().alert();

      // dismiss alert
      alrt.dismiss();

      //again get the alert
      c.click();

      // Get alert text
      String s = alrt.getText();
      System.out.println("Alert text is: " + s);

      // accept alert
      alrt.accept();

      // quitting the browser
      driver.quit();
   }
}
Alert text is: Hello world!

Process finished with exit code 0

在上面的示例中,我们捕获了警报上的文本并在控制台中收到了消息 - Alert text is: Hello world!

In the above example, we captured the text on the alert and received the message in the console - Alert text is: Hello world!.

最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。

Finally, the message Process finished with exit code 0 was received, signifying successful execution of the code.

Example 2 - Confirmation Alerts

让我们讨论一下网页上的另一个警报,如下所示。单击第二个 Click Me 按钮时,我们会在网页上收到文本为 - Press a button! 的警报。

Let us discuss another alert on a web page as shown in the below image. On clicking the second Click Me button, we would get an alert with the text - Press a button! on the web page.

selenium alerts popups 2

单击警报上的“确定”按钮后,我们将在网页上收到文本 You pressed OK!

On clicking the OK button on the alert, we would get the text You pressed OK! on the web page.

selenium alerts popups 3

单击警报上的“取消”按钮后,我们将在页面上收到文本“您按下了取消!”。

And on clicking the Cancel button on the alert, we would get the text You pressed Cancel! on the page.

selenium alerts popups 4

代码实现

Code Implementation

package org.example;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;

public class AlertJS {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // adding implicit wait of 12 secs
      driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);

      // Opening the webpage where we will get alert
      driver.get("https://www.tutorialspoint.com/selenium/practice/alerts.php");

      // identify button for clicking to get alert
      WebElement c =driver.findElement
         (By.xpath("/html/body/main/div/div/div[2]/div[3]/button"));
      c.click();

      // switch driver context to alert
      Alert alrt = driver.switchTo().alert();

      // Get alert text
      String s = alrt.getText();
      System.out.println("Alert text is: " + s);

      //accept alert
      alrt.accept();

      // get text after accepting alert
      WebElement text =driver.findElement(By.xpath("//*[@id='desk']"));
      System.out.println("Text appearing after alert accept: " + text.getText());

      // again get the alert
      c.click();

      // switch driver context to alert
      Alert alrt1 = driver.switchTo().alert();

      // now dismiss alert
      alrt1.dismiss();

      // get text after dismissing alert
      WebElement text1 =driver.findElement(By.xpath("//*[@id='desk']"));
      System.out.println("Text appearing after alert dismiss: " + text1.getText());

      // quitting the browser
      driver.quit();
   }
}
Alert text is: Press a button!
Text appearing after alert accept: You pressed OK!
Text appearing after alert dismiss: You pressed Cancel!

在上面的示例中,我们捕获了警报上的文本并在控制台中收到了消息 - Alert text is: Press a button! 。然后在接受警报后,我们捕获了显示在页面上的文本,其中控制台上显示的消息为 - Text appearing after alert accept: You pressed OK! 。另外,在关闭警报时,我们捕获了显示在页面上的文本,其中控制台上显示的消息为 - Text appearing after alert dismiss: You pressed Cancel!

In the above example, we captured the text on the alert and received the message in the console - Alert text is: Press a button!. Then on accepting the alert, we had captured a text which appeared on the page with the message appearing on the console - Text appearing after alert accept: You pressed OK!. Also, on dismissing the alert, we had captured a text which appeared on the page with the message appearing on the console - Text appearing after alert dismiss: You pressed Cancel!.

Example 3 - Prompt Alerts

让我们在网页上讨论另一个弹出框,如下所示。点击第三个 Click Me 按钮,我们会在网页上得到一个带有 What is your name? 文本和输入框的弹出框。

Let us discuss another alert on a web page as shown in the below image. On clicking the third Click Me button, we would get an alert with the text - What is your name? along with an input box on the web page.

selenium alerts popups 5

代码实现

Code Implementation

package org.example;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;

public class AlertsPromp {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // adding implicit wait of 12 secs
      driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);

      // Opening the webpage where we will get alert
      driver.get("https://www.tutorialspoint.com/selenium/practice/alerts.php");

      // identify button for clicking to get alert
      WebElement c =driver.findElement
         (By.xpath("/html/body/main/div/div/div[2]/div[4]/button"));
      c.click();

      // switch driver context to alert
      Alert alrt = driver.switchTo().alert();

      // Get alert text
      String s = alrt.getText();
      System.out.println("Alert text is: " + s);

      // enter text then accept alert
      alrt.sendKeys("Selenium");
      alrt.accept();

      // again get the alert
      c.click();

      // switch driver context to alert
      Alert alrt1 = driver.switchTo().alert();

      // again enter text then dismiss alert
      alrt1.sendKeys("Selenium");
      alrt1.dismiss();

      // quitting the browser
      driver.quit();
   }
}
Alert text is: What is your name?

在上述示例中,我们在弹出框中捕获了文本,并收到控制台中的信息 - Alert text is: What is your name?

In the above example, we captured the text on the alert and received the message in the console - Alert text is: What is your name?

Example 4 - Alert with Wait Condition

我们在网页上讨论另一个弹出框,如下所示。点击第一个 Click Me 按钮,我们会在 5 秒后得到一个带有 Hello just appeared 文本的弹出框。

Let us discuss another alert on a web page as shown in the below image. On clicking the first Click Me button, we would get an alert with the text - Hello just appeared which would appear after 5 seconds.

selenium alerts popups 6

代码实现

Code Implementation

package org.example;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;

public class AlertsPromp {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // Opening the webpage where we will get alert
      driver.get("https://www.tutorialspoint.com/selenium/practice/alerts.php");

      // identify button for clicking to get alert
      WebElement c = driver.findElement
         (By.xpath("/html/body/main/div/div/div[2]/div[2]/button"));
      c.click();

      // explicit wait to expected condition for presence alert
      WebDriverWait wt = new WebDriverWait(driver, Duration.ofSeconds(6));
      wt.until(ExpectedConditions.alertIsPresent());

      // switch driver context to alert
      Alert alrt = driver.switchTo().alert();

      // Get alert text
      String s = alrt.getText();
      System.out.println("Text is: " + s);

      // accept alert
      alrt.accept();

      // quitting the browser
      driver.quit();
   }
}
Text is: Hello just appeared

Conclusion

这总结了我们对 Selenium WebDriver 弹出框和窗口的教程的全面介绍。我们首先描述了处理 Selenium 中的弹出框和窗口的基本方法,并通过示例说明了如何在 Selenium Webdriver 中处理不同类型的弹出框和窗口。这使您深入了解 Selenium WebDriver 弹出框和窗口。明智的做法是持续实践您学到的知识,并探索其他与 Selenium 相关的知识,以加深您的理解并拓宽您的视野。

This concludes our comprehensive take on the tutorial on Selenium WebDriver Alerts & Popups. We’ve started with describing basic methods to handle Alerts & Popups in Selenium, and examples to illustrate how to handle different types of alerts & popups in Selenium Webdriver. This equips you with in-depth knowledge of the Selenium WebDriver Alerts & Popups. It is wise to keep practicing what you’ve learned and exploring others relevant to Selenium to deepen your understanding and expand your horizons.