WebdriverIO предоставляет мощные средства для работы с куки и локальным/сессионным хранилищем браузера, что позволяет автоматизировать тесты на более глубоком уровне, контролируя состояние приложения между сессиями или проверяя сохранённые данные.
Куки используются для хранения информации о сессиях, пользовательских предпочтениях и аутентификации. WebdriverIO предоставляет методы для управления куками на уровне браузера.
Получение всех куки:
const allCookies = await browser.getCookies();
console.log(allCookies);
Метод возвращает массив объектов, где каждый объект содержит ключи:
name, value, domain,
path, expiry, httpOnly,
secure.
Добавление новой куки:
await browser.setCookies({
name: 'session_id',
value: '12345',
path: '/',
httpOnly: true,
secure: true
});
Получение конкретной куки по имени:
const cookie = await browser.getCookie('session_id');
console.log(cookie);
Удаление куки:
await browser.deleteCookies('session_id'); // удаление по имени
await browser.deleteCookies(); // удаление всех куки
Важно учитывать, что операции с куки выполняются только для текущего домена, открытого в браузере. Попытка обратиться к куки другого домена приведёт к пустому результату.
WebdriverIO позволяет управлять localStorage и sessionStorage, что удобно для тестирования SPA (Single Page Applications) и проверки состояния клиента без необходимости взаимодействия с сервером.
Установка данных в localStorage:
await browser.execute(() => {
localStorage.setItem('token', 'abcdef123456');
localStorage.setItem('theme', 'dark');
});
Получение данных из localStorage:
const token = await browser.execute(() => localStorage.getItem('token'));
console.log(token); // 'abcdef123456'
Удаление данных из localStorage:
await browser.execute(() => localStorage.removeItem('token'));
await browser.execute(() => localStorage.clear()); // очистка всех данных
Аналогичные методы применяются для sessionStorage:
await browser.execute(() => sessionStorage.setItem('sessionKey', 'value'));
const sessionValue = await browser.execute(() => sessionStorage.getItem('sessionKey'));
await browser.execute(() => sessionStorage.clear());
Отличие localStorage от sessionStorage заключается в том, что localStorage сохраняет данные между перезапусками браузера, а sessionStorage очищается после закрытия вкладки.
Для надежного тестирования часто требуется проверять существование куки или элементов хранилища перед выполнением действий:
const cookieExists = await browser.getCookie('session_id') !== null;
const tokenExists = await browser.execute(() => localStorage.getItem('token') !== null);
console.log(cookieExists, tokenExists);
Такой подход предотвращает ошибки при работе с данными, которых может ещё не быть.
WebdriverIO позволяет изолировать тестовые сессии, что важно при параллельном запуске тестов:
beforeEach(async () => {
await browser.deleteCookies();
await browser.execute(() => {
localStorage.clear();
sessionStorage.clear();
});
});
const cookies = await browser.getCookies();
const localStorageData = await browser.execute(() => ({ ...localStorage }));
// позже
await browser.setCookies(cookies);
await browser.execute((data) => {
Object.entries(data).forEach(([key, value]) => localStorage.setItem(key, value));
}, localStorageData);
await.httpOnly и secure в тестовой среде, что стоит
учитывать при написании кросс-браузерных тестов.Эти инструменты делают WebdriverIO удобным для гибкого управления состоянием приложения на стороне клиента и позволяют создавать надёжные автоматизированные сценарии, которые имитируют поведение реального пользователя с сохранением и восстановлением данных между тестами.