В 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 является фундаментальным для стабильного и масштабируемого автоматизированного тестирования. Важно использовать команды навигации, окна, куки, таймауты и параллельные сессии последовательно, чтобы обеспечить предсказуемость тестов и их корректное выполнение в любых сценариях.