Puppeteer — это библиотека Node.js, предоставляющая API для управления
браузером Chrome или Chromium через протокол DevTools. Одним из частых
сценариев использования Puppeteer является тестирование веб-приложений,
работающих с локальным хранилищем, таким как localStorage.
Эта технология позволяет веб-страницам сохранять данные в браузере
пользователя, что важно для тестирования функционала, который зависит от
состояния, сохраненного в этом хранилище.
localStorage представляет собой хранилище данных на стороне
клиента, доступное через JavaScript, и позволяет сохранять данные в
формате пар «ключ-значение». Он сохраняет данные между сессиями, что
делает его идеальным для использования в сценариях, когда необходимо
сохранять состояние между перезагрузками страниц. Puppeteer
предоставляет возможность взаимодействовать с этим хранилищем с помощью
JavaScript в контексте браузера.
Для чтения данных из localStorage в Puppeteer используется
метод evaluate(), который позволяет выполнить JavaScript
код внутри контекста страницы. Для получения значения из
localStorage достаточно передать соответствующую команду:
const value = await page.evaluate(() => {
return localStorage.getItem(&
});
Здесь ‘key’ — это ключ, по которому хранится необходимое
значение в localStorage. Этот код выполняется в контексте
страницы, и возвращаемое значение передается обратно в Node.js.
Запись данных в localStorage происходит аналогично тому,
как это делается в обычном JavaScript. Для этого нужно вызвать метод
setItem():
await page.evaluate(() => {
localStorage.setItem('key', 'value');
});
В этом примере сохраняется пара «ключ-значение», где ‘key’
— это имя ключа, а ‘value’ — его значение.
Чтобы удалить данные из localStorage, используется метод
removeItem():
await page.evaluate(() => {
localStorage.removeItem('key');
});
Этот код удаляет элемент с ключом ‘key’ из локального
хранилища.
Если необходимо очистить все данные в localStorage, можно
использовать метод clear():
await page.evaluate(() => {
localStorage.clear();
});
Этот метод удаляет все ключи и значения из хранилища.
Проверка функциональности, зависящей от состояния в
localStorage, является важной частью тестирования
веб-приложений. Puppeteer позволяет легко тестировать такие сценарии,
выполняя операции с данными, сохраненными в localStorage, и
проверяя, как приложение реагирует на эти изменения.
Часто встречающимся сценарием является тестирование состояния входа
пользователя. Допустим, приложение сохраняет информацию о пользователе в
localStorage, чтобы автоматически аутентифицировать его при
следующем посещении. Для тестирования этого можно использовать следующий
подход:
localStorage, которые имитируют успешный
вход пользователя.
localStorage.
Пример кода:
// Запись данных в localStorage
await page.evaluate(() => {
localStorage.setItem('auth', JSON.stringify({ token: 'valid_token' }));
});
// Перезагрузка страницы
await page.reload();
// Проверка состояния
const auth = await page.evaluate(() => {
return JSON.parse(localStorage.getItem('auth'));
});
if (auth && auth.token === 'valid_token') {
console.log('Пользователь авторизован');
}
Этот код позволяет проверить, что после перезагрузки страницы сохраненные данные остаются актуальными, и приложение правильно обрабатывает состояние авторизации.
Важным аспектом является возможность настройки начального состояния
приложения с помощью localStorage перед выполнением тестов.
Это позволяет значительно ускорить тестирование, исключив необходимость
выполнения шагов, таких как регистрация или вход в систему.
Для подготовки страницы с заданным состоянием хранилища перед выполнением теста, можно использовать следующий код:
await page.evaluate(() => {
localStorage.setItem('user', JSON.stringify({ id: 123, name: 'Test User' }));
});
Это полезно в случаях, когда приложение зависит от состояния, сохраненного в локальном хранилище, и нужно убедиться, что оно правильно загружает данные.
Несмотря на простоту работы с localStorage, при
автоматизации тестирования могут возникать некоторые сложности:
Кросс-доменные ограничения: localStorage
доступен только для того домена, с которого был загружен контент. Если
ваше приложение работает с несколькими доменами, то для каждого домена
придется работать с отдельным хранилищем.
Безопасность: Важно понимать, что данные, хранящиеся в
localStorage, не шифруются и могут быть легко доступны
любому JavaScript коду, выполняющемуся на той же странице. Поэтому не
стоит хранить чувствительные данные в этом хранилище.
Ограничения по объему: В отличие от cookie-файлов,
которые имеют ограничение в 4 KB, localStorage может
хранить данные объемом до 5 MB в современных браузерах. Однако это может
привести к проблемам, если приложение активно использует
localStorage для хранения больших данных.
Совместимость с различными браузерами: Хотя большинство
современных браузеров поддерживают localStorage, важно
тестировать приложение в разных браузерах, чтобы убедиться, что
поведение хранилища одинаково.
При использовании localStorage в тестах с Puppeteer стоит
учитывать следующие особенности:
Синхронность: Операции с localStorage
выполняются синхронно, что может приводить к блокировке выполнения
других задач, если в тестах есть длительные операции записи/чтения. Это
важно учитывать при написании сложных тестов.
Кэширование данных: В некоторых случаях данные,
записанные в localStorage, могут не быть сразу доступны на
следующей странице. Для их правильного чтения и использования стоит
учитывать необходимость перезагрузки страницы.
Работа с localStorage в Puppeteer предоставляет мощный
инструмент для тестирования веб-приложений, использующих клиентские
данные. Puppeteer дает возможность имитировать и проверять различные
состояния веб-страниц, что критически важно при тестировании
функционала, зависящего от локального хранилища. Используя эти
возможности, можно добиться точных и быстрых тестов, значительно
упростив разработку и поддержку веб-приложений.