WebdriverIO предоставляет мощные возможности для управления браузерными сессиями при автоматизации тестирования в JavaScript. Сессии браузеров являются основой взаимодействия с веб-приложениями, и понимание того, как они создаются, настраиваются и управляются, критически важно для успешного тестирования. В этом разделе рассматриваются основные операции, связанные с браузерными сессиями: создание, управление несколькими сессиями, использование профилей браузеров и настройка времени жизни сессий.
Для начала работы с WebdriverIO необходимо создать сессию браузера. Для этого используется WebdriverIO API, которое позволяет инициировать сессию с выбранным браузером. Это может быть как стандартный браузер (например, Chrome или Firefox), так и специальные браузеры для мобильных устройств.
Пример создания сессии с использованием Chrome:
const { remote } = require('webdriverio');
async function startSession() {
const browser = await remote({
logLevel: 'info',
capabilities: {
browserName: 'chrome'
}
});
await browser.url('https://example.com');
console.log(await browser.getTitle());
await browser.deleteSession();
}
startSession();
Этот код инициирует сессию с браузером Chrome, переходит на указанный URL, выводит заголовок страницы и завершает сессию.
После того как сессия создана, она остается активной до тех пор, пока
не будет завершена с помощью команды deleteSession(). Это
позволяет работать с браузером, выполнять действия на страницах,
взаимодействовать с элементами и проверять их состояния.
Для управления состоянием сессии можно использовать несколько функций:
getSession() — возвращает информацию о
текущей сессии.deleteSession() — завершает текущую
сессию, закрывая браузер.Пример использования getSession():
const { remote } = require('webdriverio');
async function getSessionInfo() {
const browser = await remote({
logLevel: 'info',
capabilities: {
browserName: 'chrome'
}
});
const session = await browser.getSession();
console.log(session); // Выводит информацию о текущей сессии
await browser.deleteSession();
}
getSessionInfo();
WebdriverIO поддерживает управление несколькими сессиями одновременно, что полезно для параллельного тестирования или работы с различными браузерами. Для этого можно использовать WebdriverIO в режиме многозадачности.
Для создания нескольких сессий достаточно запустить несколько
экземпляров remote() с разными конфигурациями. Пример
параллельного запуска сессий:
const { remote } = require('webdriverio');
async function startMultipleSessions() {
const browser1 = await remote({
logLevel: 'info',
capabilities: { browserName: 'chrome' }
});
const browser2 = await remote({
logLevel: 'info',
capabilities: { browserName: 'firefox' }
});
await browser1.url('https://example.com');
await browser2.url('https://example.org');
console.log(await browser1.getTitle());
console.log(await browser2.getTitle());
await browser1.deleteSession();
await browser2.deleteSession();
}
startMultipleSessions();
В данном примере создаются две сессии: одна с браузером Chrome и другая с Firefox. Каждая сессия работает параллельно, что позволяет тестировать несколько браузеров одновременно.
Профили браузеров позволяют настроить конкретные предпочтения, расширения или другие параметры, которые могут быть полезны в тестах. Например, можно запустить браузер с уже установленными расширениями, сессиями авторизации или кастомизированными настройками.
Для использования профилей в Chrome можно указать путь к уже
созданному профилю с помощью опции --user-data-dir.
Пример использования профиля для Chrome:
const { remote } = require('webdriverio');
async function startWithProfile() {
const browser = await remote({
logLevel: 'info',
capabilities: {
browserName: 'chrome',
'goog:chromeOptions': {
args: ['--user-data-dir=/path/to/your/profile']
}
}
});
await browser.url('https://example.com');
console.log(await browser.getTitle());
await browser.deleteSession();
}
startWithProfile();
Этот пример запускает Chrome с указанным профилем, что позволяет использовать сохраненные куки, пароли и другие данные.
Время жизни сессии можно контролировать через параметры WebDriver. В некоторых случаях, например, при автоматическом запуске тестов на CI/CD, может быть необходимо ограничить время работы сессии, чтобы избежать долгих ожиданий или зависших процессов.
WebdriverIO поддерживает настройку времени жизни сессии с помощью
параметра maxInstances в конфигурационном файле. Также
можно управлять временем ожидания, используя опции
waitTimeout или connectionTimeout.
Пример настройки времени ожидания:
const { remote } = require('webdriverio');
async function sessionWithTimeout() {
const browser = await remote({
logLevel: 'info',
capabilities: {
browserName: 'chrome'
},
connectionTimeout: 10000, // 10 секунд на установление соединения
waitTimeout: 5000 // 5 секунд на ожидание элементов
});
await browser.url('https://example.com');
await browser.deleteSession();
}
sessionWithTimeout();
В данном примере сессия будет завершена, если соединение не удастся установить в течение 10 секунд или если элементы на странице не будут найдены в течение 5 секунд.
При работе с браузерными сессиями важно правильно обрабатывать ошибки. Это помогает избежать непредвиденных сбоев в тестах и предоставляет информацию о том, что именно пошло не так. WebdriverIO предоставляет механизмы для работы с ошибками через асинхронные блоки кода.
Пример обработки ошибок:
const { remote } = require('webdriverio');
async function safeSession() {
let browser;
try {
browser = await remote({
logLevel: 'info',
capabilities: { browserName: 'chrome' }
});
await browser.url('https://example.com');
console.log(await browser.getTitle());
} catch (error) {
console.error('Ошибка при работе с сессией:', error);
} finally {
if (browser) {
await browser.deleteSession();
}
}
}
safeSession();
Этот пример гарантирует, что сессия будет закрыта даже в случае возникновения ошибки.
WebdriverIO предоставляет широкий набор возможностей для работы с браузерными сессиями. Правильное управление сессиями является неотъемлемой частью успешного тестирования веб-приложений. Важно уметь создавать, настраивать и завершать сессии, а также эффективно управлять их временем жизни, особенно в контексте многозадачности и работы с профилями.