WebDriverIO — это высокоуровневый инструмент для автоматизации браузеров с использованием протокола WebDriver или DevTools. Основным элементом любой автоматизации является сессия WebDriver, которая представляет собой соединение с браузером, управляемое через WebDriver протокол. Жизненный цикл сессии напрямую влияет на стабильность тестов, скорость их выполнения и корректность отчётности.
Сессия WebDriver начинается с создания экземпляра
браузера. В WebDriverIO это делается через объект
browser, который автоматически создается при старте теста,
если используется стандартная конфигурация с wdio.conf.js.
Внутри WebDriverIO:
sessionId), который используется для
всех последующих команд.Пример явного запуска сессии через WebDriverIO:
const { remote } = require('webdriverio');
(async () => {
const browser = await remote({
capabilities: {
browserName: 'chrome'
}
});
await browser.url('https://example.com');
console.log(await browser.getTitle());
await browser.deleteSession();
})();
Здесь remote() создаёт сессию, а
deleteSession() завершает её корректно.
После создания сессии объект browser позволяет выполнять
команды взаимодействия с браузером:
browser.url(), browser.back(),
browser.refresh().browser.$(),
element.click(), element.setValue().browser.getTitle(),
element.getText(),
element.getAttribute().Каждая команда отправляется на WebDriver сервер с использованием
REST-запросов, где sessionId указывает, к
какой сессии относится действие.
Жизненный цикл сессии включает следующие этапы:
remote() или
запуск теста через wdio CLI.waitUntil,
setTimeouts, что важно для асинхронного
взаимодействия.browser.deleteSession(), либо закрытие теста автоматически
через тестовый фреймворк (Mocha, Jasmine, Cucumber). Завершение сессии
гарантирует корректное освобождение ресурсов браузера.Важно понимать, что несвоевременное завершение сессии приводит к «зависшим» процессам браузера, утечкам памяти и некорректным результатам следующих тестов.
WebDriverIO поддерживает параллельное выполнение
тестов, что реализуется через запуск нескольких сессий
одновременно. Каждая сессия имеет уникальный sessionId и
работает независимо. Параллельность достигается через:
maxInstances в конфигурации
wdio.conf.js.Пример настройки параллельных сессий:
exports.config = {
maxInstances: 5,
capabilities: [{
browserName: 'chrome',
maxInstances: 2
}]
};
Здесь одновременно могут выполняться 2 сессии Chrome, а общая максимальная загрузка — 5 экземпляров браузера.
WebDriverIO предоставляет методы для контроля сессии:
browser.sessionId — получение идентификатора текущей
сессии.browser.isSessionActive() — проверка активности
сессии.browser.reloadSession() — перезапуск сессии без полного
закрытия браузера, что полезно для сброса состояния между тестами.Эффективное управление сессией позволяет:
Во время работы сессия может завершиться с ошибкой, если:
WebDriverIO обрабатывает ошибки через Promise
rejection и исключения. При этом важно корректно обрабатывать
try/catch и завершать сессию через
deleteSession(), чтобы не оставлять зависшие процессы.
Помимо классического WebDriver протокола, WebDriverIO поддерживает DevTools сессии, позволяя управлять браузером напрямую через Chrome DevTools Protocol (CDP). Это обеспечивает:
Пример создания DevTools сессии:
const browser = await remote({
capabilities: {
browserName: 'chrome',
'wdio:devtoolsOptions': { headless: true }
}
});
deleteSession() даже при падении
теста.reloadSession() для сброса состояния без
полного закрытия браузера.Жизненный цикл сессии является фундаментом автоматизации в WebDriverIO. Грамотное управление сессиями обеспечивает стабильность тестов, предсказуемость результатов и эффективность в масштабируемых проектах.