WebdriverIO предоставляет удобные возможности для автоматизации тестирования в браузере, включая управление состоянием приложения. В процессе тестирования может возникнуть необходимость сохранять и восстанавливать состояние приложения (например, состояние форм, пользовательских настроек, данных сессии) между тестами. Это помогает ускорить выполнение тестов и избежать повторения одних и тех же действий, таких как авторизация или настройка данных.
Сохранение состояния теста дает возможность избежать лишних затрат времени на выполнение однотипных действий в каждом тесте. Это важно для больших тестовых наборов, где каждый тест может требовать инициализации одинаковых условий, что приводит к значительному увеличению времени на выполнение. Вместо того чтобы снова и снова выполнять одни и те же шаги, состояние можно сохранить и загрузить при необходимости, что ускоряет процесс.
Существует несколько типов состояния, которые могут быть сохранены и восстановлены:
WebdriverIO предоставляет несколько механизмов для сохранения состояния, наиболее часто используются следующие методы:
Одним из самых распространенных способов сохранения состояния
является работа с cookies. В WebdriverIO можно сохранить все cookies
браузера с помощью метода getCookies(), а затем
восстановить их при помощи setCookies().
Пример сохранения и загрузки cookies:
describe('Сохранение и загрузка cookies', () => {
it('Сохранение cookies', async () => {
await browser.url('https://example.com');
const cookies = await browser.getCookies();
// Сохранение cookies в файл
fs.writeFileSync('cookies.json', JSON.stringify(cookies));
});
it('Загрузка cookies', async () => {
await browser.url('https://example.com');
const cookies = JSON.parse(fs.readFileSync('cookies.json', 'utf8'));
for (const cookie of cookies) {
await browser.setCookies(cookie);
}
// Дальнейшие шаги теста
});
});
В данном примере используется модуль fs для записи
cookies в файл и их последующего чтения. Такой подход позволяет
сохранить состояние авторизации между тестами или при перезапуске
тестов.
Локальное хранилище (localStorage) браузера может быть использовано для хранения данных, которые могут понадобиться на протяжении нескольких тестов или в рамках одной сессии.
Пример сохранения и восстановления данных в локальном хранилище:
describe('Работа с localStorage', () => {
it('Сохранение данных в localStorage', async () => {
await browser.url('https://example.com');
await browser.execute(() => {
localStorage.setItem('key', 'value');
});
});
it('Загрузка данных из localStorage', async () => {
await browser.url('https://example.com');
const value = await browser.execute(() => {
return localStorage.getItem('key');
});
console.log(value); // 'value'
});
});
В данном примере используется метод execute(), который
позволяет выполнить код непосредственно в контексте браузера. Это
позволяет взаимодействовать с JavaScript API браузера, такими как
localStorage и sessionStorage.
Для тестирования функционала, связанного с пользовательскими сессиями, можно сохранить и восстановить токены аутентификации или другие данные сессии.
Пример сохранения токена сессии:
describe('Сохранение и загрузка сессионного токена', () => {
it('Сохранение токена', async () => {
await browser.url('https://example.com');
const token = await browser.execute(() => {
return window.localStorage.getItem('auth_token');
});
fs.writeFileSync('auth_token.json', JSON.stringify({ token }));
});
it('Загрузка токена', async () => {
const { token } = JSON.parse(fs.readFileSync('auth_token.json', 'utf8'));
await browser.url('https://example.com');
await browser.execute((authToken) => {
window.localStorage.setItem('auth_token', authToken);
}, token);
// Теперь можно использовать токен для выполнения теста
});
});
В этом примере сохраняется и загружается токен из локального хранилища, что позволяет повторно использовать его в тестах.
Когда используется тестовый фреймворк, например, Mocha, можно
интегрировать сохранение состояния в жизненный цикл тестов, используя
хуки before и after.
Пример интеграции с Mocha:
describe('Тестирование с сохранением состояния', () => {
before(async () => {
const cookies = await browser.getCookies();
fs.writeFileSync('cookies.json', JSON.stringify(cookies));
});
beforeEach(async () => {
const cookies = JSON.parse(fs.readFileSync('cookies.json', 'utf8'));
for (const cookie of cookies) {
await browser.setCookies(cookie);
}
});
it('Тест с сохранением состояния', async () => {
await browser.url('https://example.com');
// Тестирование продолжается с загруженным состоянием
});
});
Сохранение и восстановление состояния является важной частью автоматизации тестирования в WebdriverIO. Использование cookies, локального хранилища и сессионных данных позволяет значительно ускорить тестирование и уменьшить время выполнения тестов. Важно правильно управлять состоянием между тестами, чтобы исключить зависимость от динамичных данных и обеспечить корректность тестового окружения.