В процессе автоматизации тестирования с использованием WebdriverIO часто возникает необходимость сохранять состояние между различными тестами. Это может быть полезно для ускорения тестов, избежания излишней повторной аутентификации, сохранения данных формы или переноса сессии между тестами, что позволяет тестировать различные функциональности без необходимости каждый раз начинать с “чистого листа”. В WebdriverIO есть несколько методов для управления состоянием между тестами.
Один из самых простых способов сохранить состояние между тестами — это использование cookies. Cookies содержат важные данные сессии, такие как информация о пользователе, авторизация и другие параметры, которые могут быть полезны для повторного использования между тестами.
WebdriverIO предоставляет функции для работы с cookies, которые можно использовать для сохранения и восстановления состояния сессии.
// Сохранение cookies
const cookies = await browser.getCookies();
// Загрузка cookies перед выполнением теста
await browser.setCookies(cookies);
Сохранение cookies в одном тесте и загрузка их в другом позволяет избежать повторной аутентификации и ускоряет выполнение тестов.
Для того чтобы сохранить cookies между тестами, можно использовать
WebdriverIO hooks, такие как before и after,
чтобы реализовать логирование состояния cookies перед и после выполнения
тестов.
let savedCookies = [];
before(async () => {
// Сохранение cookies перед тестами
savedCookies = await browser.getCookies();
});
after(async () => {
// Восстановление cookies после тестов
await browser.setCookies(savedCookies);
});
Еще одним способом сохранения состояния является использование
веб-хранилищ — localStorage и sessionStorage.
Эти методы позволяют сохранять данные прямо в браузере. Основное отличие
между ними заключается в сроке жизни данных. localStorage
сохраняет данные до тех пор, пока не будет очищен браузер или не будут
удалены вручную, в то время как sessionStorage сохраняет
данные только в рамках текущей сессии.
Для того чтобы извлечь данные из localStorage или
установить их, WebdriverIO предоставляет специальные команды.
// Получение данных из localStorage
const value = await browser.execute(() => {
return window.localStorage.getItem('key');
});
// Установка данных в localStorage
await browser.execute(() => {
window.localStorage.setItem('key', 'value');
});
Работа с sessionStorage аналогична
localStorage, однако данные сохраняются только на время
текущей сессии.
// Получение данных из sessionStorage
const value = await browser.execute(() => {
return window.sessionStorage.getItem('key');
});
// Установка данных в sessionStorage
await browser.execute(() => {
window.sessionStorage.setItem('key', 'value');
});
WebdriverIO позволяет управлять состоянием самого браузера, что
полезно, если необходимо сохранять, например, масштабирование окна или
позиции элементов. Для этого можно использовать методы управления окном
браузера, такие как browser.getWindowRect() и
browser.setWindowRect().
// Сохранение текущего состояния окна
const windowState = await browser.getWindowRect();
// Восстановление состояния окна
await browser.setWindowRect(windowState.x, windowState.y, windowState.width, windowState.height);
Если в проекте используется переменная окружения для управления состоянием тестов, это можно интегрировать с WebdriverIO. Например, можно хранить информацию о состоянии сессии, аутентификации или другие параметры в переменных окружения и передавать их между тестами.
// Сохранение состояния сессии в переменной окружения
process.env.USER_SESSION = 'your-session-data';
Для восстановления состояния в другом тесте можно использовать переданные значения.
// Восстановление данных сессии из переменной окружения
const sessionData = process.env.USER_SESSION;
Многие тестовые фреймворки, такие как Mocha или Jasmine, позволяют
настроить хуки (before, after,
beforeEach, afterEach) для управления
состоянием между тестами. Например, можно сохранить состояние перед
запуском теста и восстановить его после выполнения.
let sessionData;
beforeEach(async () => {
// Сохранение состояния перед каждым тестом
sessionData = await browser.getCookies();
});
afterEach(async () => {
// Восстановление состояния после каждого теста
await browser.setCookies(sessionData);
});
Хотя сохранение состояния между тестами позволяет значительно ускорить процесс тестирования, существует несколько моментов, на которые стоит обратить внимание:
Изоляция тестов: Если тесты не изолированы должным образом, изменение состояния в одном тесте может повлиять на результаты других тестов. Важно убедиться, что каждый тест работает в своем собственном контексте.
Многофазное тестирование: При работе с данными сессии или cookies стоит помнить, что они могут изменяться в процессе выполнения тестов, поэтому важно отслеживать их актуальность.
Управление состоянием в браузере: Если используется несколько окон или вкладок браузера, нужно тщательно следить за тем, чтобы состояние передавалось и восстанавливалось для каждого окна или вкладки.
Сохранение состояния между тестами в WebdriverIO является мощным
инструментом для повышения эффективности тестирования, позволяя избежать
повторных действий, таких как авторизация или загрузка данных.
Использование cookies, localStorage,
sessionStorage и других методов управления состоянием
позволяет сохранять информацию, необходимую для успешного выполнения
тестов. Однако при этом необходимо учитывать возможные проблемы с
изоляцией тестов и корректным управлением состоянием между тестами.