В веб-приложениях часто используется хранение данных на стороне клиента через localStorage и sessionStorage. Эти механизмы позволяют сохранять ключ-значение пары, которые доступны для последующих сессий (localStorage) или в рамках одной сессии браузера (sessionStorage). В автоматизированном тестировании с Protractor важно уметь читать, записывать и очищать эти данные для проверки состояния приложения и подготовки тестовых сценариев.
В Protractor доступ к объектам localStorage и
sessionStorage осуществляется через выполнение
JavaScript-кода в контексте браузера с помощью метода
browser.executeScript().
Пример получения значения из localStorage:
let value = await browser.executeScript("return window.localStorage.getItem('ключ');");
console.log(value);
Пример записи значения в localStorage:
await browser.executeScript("window.localStorage.setItem('ключ', 'значение');");
Для sessionStorage синтаксис аналогичен:
// Чтение значения
let sessionValue = await browser.executeScript("return window.sessionStorage.getItem('ключ');");
// Запись значения
await browser.executeScript("window.sessionStorage.setItem('ключ', 'значение');");
Очистка хранилищ полезна для сброса состояния между тестами.
// Очистка localStorage
await browser.executeScript("window.localStorage.clear();");
// Очистка sessionStorage
await browser.executeScript("window.sessionStorage.clear();");
Можно также удалять конкретный ключ:
await browser.executeScript("window.localStorage.removeItem('ключ');");
Для ассерций рекомендуется использовать стандартные инструменты, такие как Jasmine:
it('должен сохранять правильное значение в localStorage', async () => {
await browser.executeScript("window.localStorage.setItem('user', 'testUser');");
const storedUser = await browser.executeScript("return window.localStorage.getItem('user');");
expect(storedUser).toEqual('testUser');
});
Для sessionStorage проверка аналогична.
Иногда необходимо имитировать состояние приложения без прохождения всех шагов UI. Для этого можно напрямую записывать данные в хранилище перед загрузкой страницы:
await browser.get('https://example.com');
await browser.executeScript("window.localStorage.setItem('token', 'abc123');");
await browser.refresh();
В результате приложение загрузится уже с установленным токеном, что ускоряет тестирование аутентификации или работы с пользовательскими настройками.
После изменения хранилища может потребоваться дождаться обновления интерфейса. Для этого используются ExpectedConditions:
const EC = protractor.ExpectedConditions;
await browser.executeScript("window.localStorage.setItem('theme', 'dark');");
const elementToCheck = element(by.id('theme-indicator'));
await browser.wait(EC.textToBePresentInElement(elementToCheck, 'dark'), 5000);
browser.restart() для полной изоляции.executeScript возвращают промис, необходимо использовать
await или then для корректного управления
потоками.localStorage и sessionStorage хранят данные в виде строк. Для работы с объектами необходимо использовать JSON:
// Сохранение объекта
const user = { id: 1, name: 'Test' };
await browser.executeScript(`window.localStorage.setItem('user', '${JSON.stringify(user)}');`);
// Получение объекта
const storedUser = await browser.executeScript("return JSON.parse(window.localStorage.getItem('user'));");
console.log(storedUser.name); // Test
Для отладки можно использовать стандартные инструменты браузера: консоль DevTools. Protractor позволяет выводить содержимое localStorage/sessionStorage в консоль:
const allLocalStorage = await browser.executeScript("return window.localStorage;");
console.log(allLocalStorage);
Это помогает убедиться, что тест корректно записывает и читает данные.
Использование localStorage и sessionStorage в Protractor делает тестирование более гибким и ускоряет сценарии, которые зависят от состояния приложения. Правильное управление этими хранилищами обеспечивает стабильность и предсказуемость автоматических тестов.