Когда и как очищать локальное хранилище в браузере
Что проверяют
Понимаете ли вы, какое состояние клиент хранит у себя и как оно влияет на воспроизводимость багов и стабильность автотестов. Следом часто спрашивают, чем localStorage отличается от sessionStorage и cookies и что должно исчезнуть при выходе из аккаунта.
Как отвечать
Сначала коротко про само хранилище. localStorage живёт без срока, пока данные не удалит сайт или пользователь, sessionStorage до закрытия вкладки. Оба привязаны к origin, то есть к схеме, домену и порту: у app.example.com и example.com хранилища разные. Лимит обычно около 5 МБ на origin, при переполнении запись бросает QuotaExceededError.
Когда чистить:
- первый визит: онбординг, баннер cookies, выбор региона и языка;
- выкладка с новым форматом данных: проверить и чистое хранилище, и старые значения;
- автотесты: каждый тест стартует из известного состояния;
- выход из аккаунта: после logout токены и персональные данные должны исчезнуть, это отдельный тест-кейс.
Как чистить:
- вручную: DevTools, вкладка Application, раздел Storage и кнопка «Clear site data». Она убирает хранилища, IndexedDB, cookies, Cache Storage и service worker. Отдельный ключ удаляется в разделе Local Storage;
- из консоли:
localStorage.clear()илиlocalStorage.removeItem('key'); - в автотестах: Playwright по умолчанию даёт каждому тесту новый изолированный контекст, Cypress с включённой по умолчанию
testIsolationчистит хранилища перед каждым тестом, в Selenium вызываютexecute_scriptсlocalStorage.clear().
Где спотыкаются
Чистят только localStorage, а состояние лежит в cookies, IndexedDB или кэше service worker. Баг «не воспроизводится», хотя у пользователя он есть.
Всегда тестируют на чистом хранилище. Реальные пользователи приходят с данными прошлой версии, и сломанное чтение старого формата при таком подходе никто не увидит.
Не смотрят, что именно хранится. Токен доступа в localStorage читается любым скриптом на странице при XSS, это стоит завести как замечание по безопасности.