Управление profile данными в WebdriverIO
WebdriverIO предоставляет мощные возможности для тестирования веб-приложений, включая работу с данными профиля пользователя. В тестах часто требуется эмулировать действия пользователя с учётом его персональных настроек и данных, таких как куки, локальное хранилище и сессии. Это позволяет создать более реалистичные тестовые сценарии, где взаимодействие с приложением происходит с учётом состояния пользователя.
Куки (cookies) — это небольшие фрагменты данных, которые веб-приложение сохраняет на устройстве пользователя для хранения информации о сессии, предпочтениях или настройках. WebdriverIO позволяет управлять куки через API, предоставляемое браузером.
В WebdriverIO можно работать с куками через команды
getCookies, setCookies и
deleteCookies. Эти команды позволяют получать, добавлять и
удалять куки в процессе выполнения теста.
Получение всех кук:
browser.getCookies().then(cookies => {
console.log(cookies);
});
Добавление новой куки:
browser.setCookies({ name: 'user_session', value: '12345', domain: 'example.com' });
Удаление куки:
browser.deleteCookies('user_session');
Локальное хранилище и сессии позволяют хранить данные на стороне клиента. Эти данные могут быть использованы для хранения состояния приложения между сессиями или только в рамках текущей сессии.
WebdriverIO предоставляет возможность работать с локальным хранилищем
через browser.execute() или методы из пакета
@wdio/devtools-service.
Запись данных в локальное хранилище:
browser.execute(() => {
localStorage.setItem('user', JSON.stringify({ id: 1, name: 'Test User' }));
});
Чтение данных из локального хранилища:
browser.execute(() => {
return JSON.parse(localStorage.getItem('user'));
}).then(user => {
console.log(user);
});
Сессионные данные хранятся в объекте sessionStorage и
могут быть использованы для управления состоянием данных на протяжении
одной сессии пользователя. Однако в отличие от локального хранилища,
данные в sessionStorage исчезают при закрытии браузера.
Запись данных в сессионное хранилище:
browser.execute(() => {
sessionStorage.setItem('cart', JSON.stringify([{ item: 'Book', quantity: 2 }]));
});
Чтение данных из сессионного хранилища:
browser.execute(() => {
return JSON.parse(sessionStorage.getItem('cart'));
}).then(cart => {
console.log(cart);
});
В процессе тестирования может потребоваться восстановление состояния профиля пользователя, например, после перезагрузки страницы или между тестами. Использование куки, локального хранилища и сессий позволяет обеспечить сохранение данных между тестами и их восстановление в нужный момент.
Для эмуляции пользовательского профиля можно использовать последовательность команд для установки всех необходимых данных (куки, сессии, локальное хранилище) до начала выполнения теста.
Пример восстановления состояния профиля:
beforeEach(() => {
browser.setCookies({ name: 'user_session', value: 'abcd1234', domain: 'example.com' });
browser.execute(() => {
localStorage.setItem('user', JSON.stringify({ id: 1, name: 'Test User' }));
});
browser.execute(() => {
sessionStorage.setItem('cart', JSON.stringify([{ item: 'Laptop', quantity: 1 }]));
});
});
Важно иметь возможность очистки или обновления профиля перед каждым тестом. Это необходимо для того, чтобы каждый тест выполнялся в чистом, независимом состоянии.
Очистка данных профиля перед тестом:
beforeEach(() => {
browser.deleteCookies();
browser.execute(() => {
localStorage.clear();
sessionStorage.clear();
});
});
Сложные сценарии тестирования могут требовать использования различных наборов данных для имитации разных состояний профиля. Это позволяет удостовериться, что приложение корректно реагирует на изменения в данных пользователя.
Использование разных наборов куков и данных локального хранилища позволяет протестировать работу приложения для разных типов пользователей.
beforeEach(() => {
// Эмуляция профиля администратора
browser.setCookies({ name: 'user_session', value: 'admin123', domain: 'example.com' });
browser.execute(() => {
localStorage.setItem('user', JSON.stringify({ id: 1, name: 'Admin User' }));
});
// Эмуляция профиля обычного пользователя
browser.setCookies({ name: 'user_session', value: 'user123', domain: 'example.com' });
browser.execute(() => {
localStorage.setItem('user', JSON.stringify({ id: 2, name: 'Normal User' }));
});
});
В рамках различных окружений тестирования может потребоваться использование различных данных профиля. Например, в тестах для продакшн-окружения данные профиля могут быть реальными, в то время как для тестов на staging или в процессе CI/CD используется фальшивые или заранее подготовленные данные.
WebdriverIO позволяет конфигурировать окружения через настройки в файле конфигурации, и в зависимости от окружения можно выбирать соответствующие профили.
Пример настройки для разных окружений:
if (process.env.ENV === 'production') {
// Использование реальных данных
browser.setCookies({ name: 'user_session', value: 'realUserToken', domain: 'example.com' });
} else {
// Использование тестовых данных
browser.setCookies({ name: 'user_session', value: 'testUserToken', domain: 'example.com' });
}
В процессе автоматического тестирования в CI/CD важно использовать стабильные и предсказуемые данные профиля. Для этого можно интегрировать процессы очистки и восстановления данных профиля в pipeline.
Пример для CI/CD pipeline:
before(() => {
browser.deleteCookies();
browser.execute(() => {
localStorage.clear();
sessionStorage.clear();
});
});
after(() => {
browser.deleteCookies();
browser.execute(() => {
localStorage.clear();
sessionStorage.clear();
});
});
Этот подход гарантирует, что каждый запуск тестов будет происходить в изолированном окружении, без влияния предыдущих данных профиля.
Работа с данными профиля в WebdriverIO позволяет моделировать взаимодействие с приложением в условиях, приближенных к реальным. Управление куками, сессиями и локальным хранилищем обеспечивает высокую гибкость в тестировании, позволяя имитировать различные состояния пользователя и эффективно проводить тесты с учётом индивидуальных настроек.