Управление сессией браузера

В WebdriverIO сессия браузера является базовым элементом для автоматизации тестирования. Сессия создаётся при запуске теста и поддерживает взаимодействие с веб-страницей до её завершения. Управление сессией позволяет эффективно контролировать состояние браузера, управлять окнами, вкладками и навигацией.


Инициализация и завершение сессии

Создание сессии осуществляется автоматически при запуске WebdriverIO через конфигурационный файл. Каждая сессия уникальна и идентифицируется sessionId, который используется для всех последующих команд.

Пример получения текущей сессии:

const session = await browser.getSession();
console.log(session.sessionId);

Завершение сессии выполняется с помощью команды browser.deleteSession(). Это необходимо при ручном управлении тестами или в сценариях с динамическим созданием сессий:

await browser.deleteSession();

Ключевой момент: каждая команда WebdriverIO выполняется в контексте текущей сессии. Потеря сессии приводит к невозможности взаимодействия с браузером.


Навигация и управление окнами

Сессия позволяет управлять URL и историей браузера:

await browser.url('https://example.com');  // Переход на страницу
await browser.refresh();                    // Обновление страницы
await browser.back();                       // Переход назад
await browser.forward();                    // Переход вперёд

Управление окнами включает открытие, закрытие и переключение между окнами:

const originalWindow = await browser.getWindowHandle();
await browser.newWindow('https://webdriver.io');   // Создание нового окна
const allWindows = await browser.getWindowHandles();
await browser.switchToWindow(allWindows[1]);      // Переключение на новое окно
await browser.closeWindow();                       // Закрытие текущего окна
await browser.switchToWindow(originalWindow);     // Возврат к исходному окну

Управление вкладками

В WebdriverIO вкладки рассматриваются как отдельные окна. Для открытия новой вкладки используется browser.newWindow() с указанием URL и опцией windowName:

await browser.newWindow('https://webdriver.io', { windowName: 'tab2' });

Переключение между вкладками выполняется через getWindowHandles() и switchToWindow(). Управление вкладками важно для тестирования сценариев, где требуется работа с несколькими страницами одновременно, например, при интеграции с платежными сервисами или внешними виджетами.


Сессия и управление куками

Куки позволяют сохранять состояние между сессиями или имитировать авторизацию. WebdriverIO предоставляет команды для работы с ними:

await browser.setCookies({ name: 'sessionId', value: '12345' });
const cookies = await browser.getCookies();
console.log(cookies);
await browser.deleteCookies('sessionId');

Особенность: куки привязаны к конкретному домену и текущей сессии. После завершения сессии все куки удаляются.


Скриншоты и логирование сессии

Для отладки и анализа тестов WebdriverIO позволяет делать скриншоты и собирать логи:

await browser.saveScreenshot('./screenshot.png');
const logs = await browser.getLogs('browser');
console.log(logs);

Примечание: скриншоты можно делать как всего окна, так и отдельных элементов через команду элемента element.saveScreenshot(). Логи браузера полезны для выявления ошибок JavaScript и сетевых проблем.


Управление временем сессии

Время жизни сессии и ожидания команд контролируются глобально и локально:

// Глобальные таймауты
browser.setTimeout({ implicit: 5000, pageLoad: 10000, script: 3000 });

// Локальные ожидания
await browser.waitUntil(async () => {
    return (await browser.getTitle()) === 'Example Domain';
}, { timeout: 5000, timeoutMsg: 'Страница не загрузилась' });

Ключевой момент: правильная настройка таймаутов предотвращает зависание тестов и ускоряет отладку.


Управление состоянием окна и экрана

WebdriverIO позволяет изменять размер окна, разворачивать браузер на весь экран и получать размеры видимой области:

await browser.maximizeWindow();
await browser.setWindowSize(1280, 720);
const size = await browser.getWindowSize();
console.log(size);  // { width: 1280, height: 720 }

Это важно для тестирования адаптивного дизайна и мобильных версий сайтов.


Сессии в параллельном тестировании

При параллельном запуске тестов каждый поток получает собственную сессию. WebdriverIO управляет этим через конфигурацию capabilities:

exports.config = {
    capabilities: [{
        maxInstances: 5,
        browserName: 'chrome'
    }]
};

Каждая сессия изолирована, что позволяет одновременно тестировать различные браузеры и версии без конфликта данных.


Управление событиями сессии

WebdriverIO поддерживает хуки, которые реагируют на жизненный цикл сессии:

beforeSession: function (config, capabilities, specs) {
    console.log('Сессия начинается');
},
afterSession: function (config, capabilities, specs) {
    console.log('Сессия завершена');
}

Эти хуки полезны для настройки тестовой среды, очистки данных и логирования.


Управление сессией браузера в WebdriverIO является фундаментальным для стабильного и масштабируемого автоматизированного тестирования. Важно использовать команды навигации, окна, куки, таймауты и параллельные сессии последовательно, чтобы обеспечить предсказуемость тестов и их корректное выполнение в любых сценариях.