Puppeteer предоставляет мощные средства для управления браузером, включая функциональность для очистки различных данных сессии, таких как cookies, localStorage, sessionStorage и кэш. В некоторых случаях тестирование требует от нас полного очищения состояния браузера, чтобы гарантировать, что данные с предыдущих тестов не будут влиять на текущие. Эта глава подробно рассмотрит способы очистки данных браузера в Puppeteer.
Cookies — это небольшие фрагменты данных, которые браузер сохраняет, чтобы запомнить информацию о пользователе или его действиях на веб-странице. Во время тестирования необходимо часто очищать cookies, чтобы избежать ненужных зависимостей от предыдущих сессий.
Для удаления cookies с помощью Puppeteer достаточно использовать метод
clearCookies:
const puppeteer = require(&
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Очистка cookies
await page.deleteCookie(...await page.cookies());
await browser.close();
})();
Этот код удаляет все cookies для текущей страницы. Метод
deleteCookie может быть вызван с конкретными cookies, если
нужно очистить только их.
LocalStorage — это механизм хранения данных в браузере, доступный на стороне клиента. Он сохраняет данные, которые могут быть использованы для дальнейшей работы с приложением. В отличие от cookies, LocalStorage хранит данные как ключ-значение и доступен на протяжении всей сессии браузера.
Для очистки LocalStorage в Puppeteer используется следующий подход:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Очистка LocalStorage
await page.evaluate(() => {
localStorage.clear();
});
await browser.close();
})();
Метод localStorage.clear() полностью очищает все данные,
сохранённые в LocalStorage, для текущей страницы.
SessionStorage — это ещё один механизм хранения данных, который функционирует аналогично LocalStorage, но данные сохраняются только для текущей сессии. После закрытия вкладки или браузера данные SessionStorage теряются.
Очистка данных из SessionStorage происходит по аналогии с LocalStorage:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Очистка SessionStorage
await page.evaluate(() => {
sessionStorage.clear();
});
await browser.close();
})();
Этот метод очищает все данные, хранящиеся в SessionStorage на текущей странице.
Кэш браузера играет важную роль в улучшении производительности, но в тестах часто возникает необходимость очистить кэш, чтобы убедиться, что страница загружается заново с сервера, а не из кэша.
Для очистки кэша в Puppeteer можно использовать метод
clearBrowserCache:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Очистка кэша
await page._client.send('Network.clearBrowserCache');
await browser.close();
})();
Этот код отправляет команду для очистки кэша, очищая все закэшированные ресурсы браузера.
Иногда в тестах возникает необходимость полностью очистить все данные, связанные с текущей сессией. Для этого можно комбинировать все методы очистки данных в одном блоке:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Очистка всех данных
await page.deleteCookie(...await page.cookies());
await page.evaluate(() => {
localStorage.clear();
sessionStorage.clear();
});
await page._client.send('Network.clearBrowserCache');
await browser.close();
})();
Этот код удаляет cookies, очищает LocalStorage и SessionStorage, а также очищает кэш браузера.
Важно учитывать, что очистка данных может занимать некоторое время, особенно если страница содержит большое количество cookies или других данных. Для предотвращения гонок условий и ошибок синхронизации следует использовать подходы ожидания выполнения асинхронных операций.
Пример с использованием waitForTimeout:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Очистка cookies
await page.deleteCookie(...await page.cookies());
// Ожидание для завершения процесса очистки
await page.waitForTimeout(1000);
// Очистка LocalStorage
await page.evaluate(() => {
localStorage.clear();
});
// Ожидание завершения очистки
await page.waitForTimeout(1000);
await browser.close();
})();
В этом примере используется метод waitForTimeout, который
заставляет Puppeteer ожидать определённое время (в данном случае — 1
секунду) перед выполнением следующей операции.
В рамках тестов часто требуется очистить данные браузера между отдельными тестовыми случаями, чтобы каждый тест начинался в «чистом» состоянии. Для этого можно использовать функции, которые будут вызываться перед каждым тестом, если используется тестовый фреймворк, например, Mocha:
const puppeteer = require('puppeteer');
const { expect } = require('chai');
describe('Test Suite', () => {
let browser;
let page;
beforeEach(async () => {
browser = await puppeteer.launch();
page = await browser.newPage();
// Очистка данных перед каждым тестом
await page.deleteCookie(...await page.cookies());
await page.evaluate(() => {
localStorage.clear();
sessionStorage.clear();
});
await page._client.send('Network.clearBrowserCache');
});
afterEach(async () => {
await browser.close();
});
it('Test case 1', async () => {
// Тест 1
});
it('Test case 2', async () => {
// Тест 2
});
});
Этот код гарантирует, что перед каждым тестом будет выполнена очистка всех данных, а также, что браузер будет закрыт после каждого теста.
Очистка данных браузера является неотъемлемой частью автоматизированного тестирования, особенно когда требуется протестировать взаимодействие с веб-приложениями, где сессии могут содержать пользовательские данные или кэшированные ресурсы. Puppeteer предоставляет удобные методы для очистки cookies, localStorage, sessionStorage и кэша, что позволяет достичь необходимого уровня изоляции между тестами. Важно помнить, что правильная синхронизация и использование асинхронных операций могут существенно повысить стабильность и надёжность тестов.