В WebdriverIO управление окнами браузера является важной частью автоматизации тестирования, особенно при работе с несколькими вкладками, окнами или модальными диалогами. Закрытие окон реализуется через взаимодействие с текущим или целевым окном с использованием API WebdriverIO.
Каждое окно браузера имеет уникальный window handle, который используется для переключения и закрытия окон. Основные методы:
const handles = await browser.getWindowHandles();
const currentHandle = await browser.getWindowHandle();
getWindowHandles() возвращает массив всех активных
окон.getWindowHandle() возвращает идентификатор текущего
окна.Использование этих методов позволяет ориентироваться в множестве открытых окон и корректно управлять ими.
Метод closeWindow() закрывает текущее активное
окно. После закрытия необходимо убедиться, что браузер
переключился на существующее окно, иначе последующие команды вызовут
ошибку.
await browser.closeWindow();
// После закрытия нужно выбрать новое активное окно
const handles = await browser.getWindowHandles();
await browser.switchToWindow(handles[0]);
Особенности:
closeWindow() завершает только одно окно за вызов.Часто требуется закрыть все дополнительные вкладки или окна, оставив
только главное. Для этого используется перебор всех
window handles с исключением нужного.
const handles = await browser.getWindowHandles();
const mainHandle = handles[0]; // считаем, что главное окно первое
for (const handle of handles) {
if (handle !== mainHandle) {
await browser.switchToWindow(handle);
await browser.closeWindow();
}
}
await browser.switchToWindow(mainHandle);
Ключевой момент: переключение на окно перед закрытием обязательно,
иначе WebdriverIO не сможет выполнить closeWindow() на
неактивном окне.
Для модальных окон браузера (alert,
confirm, prompt) используется метод
closeAlert() или современные аналоги
acceptAlert() и dismissAlert():
await browser.acceptAlert(); // подтверждение
await browser.dismissAlert(); // отмена
Важно: Модальные окна блокируют основной поток выполнения скрипта, поэтому перед закрытием необходимо убедиться, что окно открыто:
if (await browser.isAlertOpen()) {
await browser.dismissAlert();
}
При автоматизации сценариев с открытием новых вкладок или окон:
// Открываем новую вкладку
await browser.newWindow('https://example.com');
// Закрываем только что открытую вкладку
const handles = await browser.getWindowHandles();
await browser.switchToWindow(handles[1]);
await browser.closeWindow();
// Возвращаемся на исходное окно
await browser.switchToWindow(handles[0]);
Рекомендации по использованию:
window handle для
возврата.waitUntil) при
работе с динамическим открытием окон.closeWindow() — базовый метод закрытия текущего
окна.switchToWindow(handle) — обязательный инструмент для
управления множеством окон.isAlertOpen().Эффективное закрытие окон обеспечивает стабильность автоматизированных тестов и предотвращает непредвиденные ошибки из-за неактивных или лишних вкладок.