Может ли Selenium работать со всплывающими окнами

«Может ли Selenium работать со всплывающими окнами» — вопрос из категории Selenium и Selenide, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, Selenium может работать с различными типами всплывающих окон (popups), но подход зависит от их природы.

1. JavaScript Alert/Confirm/Prompt: Используется Alert API:

Alert alert = driver.switchTo().alert();
alert.accept(); // Подтвердить (OK)
alert.dismiss(); // Отклонить (Cancel)
String alertText = alert.getText(); // Получить текст

2. Новое окно или вкладка браузера: Необходимо переключить контекст драйвера:

String originalWindow = driver.getWindowHandle();
// ... действие, открывающее новое окно ...
for (String handle : driver.getWindowHandles()) {
    if (!handle.equals(originalWindow)) {
        driver.switchTo().window(handle);
        break;
    }
}
// Работаем в новом окне
driver.switchTo().window(originalWindow); // Возвращаемся

3. Модальные окна на основе HTML/CSS: С ними работают как с обычными элементами DOM:

WebElement closeButton = driver.findElement(By.cssSelector(".modal .close"));
closeButton.click();

4. Нативные диалоги ОС (загрузка/сохранение файла): Selenium не может управлять ими напрямую. Стандартное решение — избегать их появления, настраивая профиль браузера (например, для автоматической загрузки файлов в указанную папку).

Важно: Для надежности тестов всегда используйте явные ожидания (WebDriverWait) перед попыткой переключиться на всплывающее окно или взаимодействовать с ним.