В этом посте рассмотрим обработку модальных окон alert, prompt и confirm в Selenium. 

О чем вообще речь?

На странице https://the-internet.herokuapp.com/javascript_alerts приведены примеры трех видов модальных всплывающих окон в JavaScript: alert, prompt и confirm. При нажатии на кнопки появляются соответствующие окна. 

Давайте посмотрим, как работать с ними в Selenium 4

package test;
import java.time.Duration;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.Chormedriver;

public class alert {
    public static void main(String[] args){
        WebDriverManager.chromedriver().setup();
        WebDriver driver = new ChromeDriver();
        driver.manage().timeouts().implicitWwait(Duration.ofSeconds(10));
        driver.get("https://the-internet.herokuapp.com/javascript_alerts");
        //this is js alerts
                       driver.findElement(By.xpath("//button[@onclick='jsAlert()']")).click();
        Alert alerts1 = driver.switchTo().alert();
        System.out.println(alert1.getText());
        alert1.accept();
        if(driver.getPageSource().contains("sucessfully clicked an alert"))
        System.out.println("sucessfully clicked an alert");

        //this is js confirm
                        driver.findElement(By.xpath("//button[@onclick='jsConfirm()']")).click();
        Alert alerts2 = driver.switchTo().alert();
        System.out.println(alert2.getText());
        alerts2.dismiss();
        if(driver.getPageSource().contains("you clicked: Cancel"))
        System.out.println("you clicked: Cancel");

        //js Prompt
        driver.findElement(By.xpath("//button[@onclick='jsPrompt()']")).click();
        Alert alerts3 = driver.switchTo().alert();
        System.out.println(alert3.getText());
        alerts2.sendKeys("this is selenium 4");
        alert3.accept();
        if(driver.getPageSource().contains("you entered: this is selenium 4"))
        System.out.println("you entered: this is selenium 4");

        driver.close();
        driver.quit();
    }
}

Разберемся, что здесь происходит

Начинаем с запуска браузера Chrome

WebDriver driver = new ChromeDriver();

И переходим на страницу https://the-internet.herokuapp.com/javascript_alerts.

Далее по очереди нажимаем кнопки показа всплывающих сообщений и обрабатываем эти события. Начинаем с alert.

driver.findElement(By.xpath("//button[@onclick='jsAlert()']")).click();

Кнопку для алерта находим по тэгу button и значению свойства onclick. Кликаем по кнопке и получаем модальное сообщение. Далее переключаемся на него, выполнив driver.switchTo().alert(), и сохраняем объект алерта в переменную alert1.

Alert alert1 = driver.switchTo().alert();

Для закрытия алерта выполняем alert1.accept().

Также после закрытия окон будем проверять текст на странице. Например, при закрытии алерта, появляющегося при нажатии кнопки "Click for JS Alert" на странице должно появиться сообщение "You successfully clicked an alert" (Вы успешно кликнули на алерт). 

if(driver.getPageSource().contains("sucessfully clicked an alert"))
    System.out.println("sucessfully clicked an alert")

То же самое делаем для JS Confirm, но на этот раз нажмем "Отмена", вызвав метод dismiss().

driver.findElement(By.xpath("//button[@onclick='jsConfirm()']")).click();
Alert alert2 = driver.switchTo().alert();
System.out.println(alert2.getText());
alert2.dismiss();

Проверяем сообщение "You clicked: Cancel" (Вы нажали: Отмена). 

if(driver.getPageSource().contains("you clicked: Cancel"))
    System.out.println("you clicked: Cancel");

Теперь давайте посмотрим на окно JS Prompt.

driver.findElement(By.xpath("//button[@onclick='jsPrompt()']")).click();
Alert alert3 = driver.switchTo().alert();
System.out.println(alert3.getText());

При клике на кнопку "Click for JS Prompt" появляется окно с текстовым полем, в которое мы вводим текст.

alert3.sendKeys("this is selenium 4");
alert3.accept();

И проверяем, сообщение на странице - "You entered: this is selenium 4" (Вы ввели: this is selenium 4)

if(driver.getPageSource().contains("you entered: this is selenium 4"))
     System.out.println("you entered: this is selenium 4");

Ссылки

Selenium / Documentation / WebDriver


Народная мудрость гласит: Любишь запросы по API отправлять, умей и json парсить! Приходите на открытое занятие, на котором познакомимся с фреймворком RestAssured, позволяющий написать автотесты на API, и JsonSchemaValidator для проверки ответа от сервера. Регистрация открыта по ссылке.

Комментарии (0)