Очистка данных браузера

Puppeteer предоставляет мощные средства для управления браузером, включая функциональность для очистки различных данных сессии, таких как cookies, localStorage, sessionStorage и кэш. В некоторых случаях тестирование требует от нас полного очищения состояния браузера, чтобы гарантировать, что данные с предыдущих тестов не будут влиять на текущие. Эта глава подробно рассмотрит способы очистки данных браузера в Puppeteer.

Удаление cookies

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

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

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();
})();

Этот код отправляет команду для очистки кэша, очищая все закэшированные ресурсы браузера.

Удаление всех данных (cookies, localStorage, sessionStorage, кэш)

Иногда в тестах возникает необходимость полностью очистить все данные, связанные с текущей сессией. Для этого можно комбинировать все методы очистки данных в одном блоке:

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 и кэша, что позволяет достичь необходимого уровня изоляции между тестами. Важно помнить, что правильная синхронизация и использование асинхронных операций могут существенно повысить стабильность и надёжность тестов.