Запуск браузера и создание контекста

Для того чтобы начать работу с Playwright, первым шагом является запуск браузера. В Playwright поддерживаются несколько браузеров: Chromium, Firefox и WebKit. Playwright предоставляет удобные API для управления браузерами, что позволяет автоматизировать действия пользователя на разных платформах.

Запуск браузера

Для запуска браузера в Playwright используется метод chromium.launch(), firefox.launch() или webkit.launch(). Каждый из этих методов открывает браузер соответствующего типа. Например, для запуска Chromium используется следующий код:

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();  // Запуск Chromium
  const context = await browser.newContext(); // Создание нового контекста
  const page = await context.newPage(); // Открытие новой страницы
  await page.goto('https://example.com'); // Переход на сайт
  await browser.close();  // Закрытие браузера
})();

Метод launch() позволяет задать несколько опций для настройки браузера. Например, можно указать, запускать ли браузер в фоновом режиме (без пользовательского интерфейса), использовать ли headless-режим и так далее. Один из примеров с параметром headless:

const browser = await chromium.launch({ headless: false });  // Запуск в обычном режиме

По умолчанию браузер запускается в headless-режиме, что значит, что интерфейс браузера не отображается на экране. Это полезно для выполнения тестов в фоновом режиме или на сервере.

Контекст браузера

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

Контекст создается с помощью метода browser.newContext(). Каждый контекст может содержать несколько страниц, и каждая страница в контексте будет изолирована от других, что позволяет эффективно тестировать различные сценарии.

const context = await browser.newContext();

Если нужно работать с несколькими контекстами (например, для тестирования с различными учетными записями), можно создать несколько контекстов и запускать тесты параллельно.

Параметры контекста

Контекст можно настроить с помощью различных параметров, таких как пользовательские куки, локальное хранилище и настройка User-Agent. Пример создания контекста с пользовательскими куки:

const context = await browser.newContext({
  cookies: [{ name: 'session', value: '12345', domain: 'example.com' }]
});

Кроме того, можно настроить контекст для имитации разных устройств, что полезно для тестирования мобильных версий веб-сайтов. Для этого используется метод newContext() с настройками устройства:

const context = await browser.newContext({
  ...devices['iPhone 11 Pro']  // Эмулируем мобильное устройство
});

Страница

Каждый контекст может содержать несколько страниц, которые создаются с помощью метода newPage(). Страница в Playwright является основным объектом для взаимодействия с веб-страницей, и именно через неё выполняются все действия, такие как переходы по URL, ввод данных в формы, щелчки по элементам и другие взаимодействия.

const page = await context.newPage();
await page.goto('https://example.com');

Совместная работа с контекстами и страницами

Playwright позволяет работать с несколькими контекстами и страницами одновременно. Например, можно запустить несколько браузеров или имитировать несколько пользователей, чтобы протестировать разные сценарии. Каждый контекст может работать независимо от других, что позволяет сохранять отдельное состояние и сессии для каждого пользователя.

Для параллельного выполнения тестов удобно использовать асинхронные функции, что позволяет не блокировать выполнение других тестов. Например:

const context1 = await browser.newContext();
const page1 = await context1.newPage();
await page1.goto('https://example.com');

const context2 = await browser.newContext();
const page2 = await context2.newPage();
await page2.goto('https://example2.com');

Такой подход помогает избежать возможных конфликтов и несоответствий данных между тестами.

Закрытие браузера

Когда работа с браузером и контекстами завершена, важно корректно закрыть браузер, чтобы освободить ресурсы. Для этого используется метод browser.close():

await browser.close();

Кроме того, для корректного завершения работы с браузером можно закрыть все страницы и контексты вручную, что также поможет избежать утечек памяти.

Заключение

Запуск браузера и создание контекста являются основой работы с Playwright. Браузеры могут запускаться как с графическим интерфейсом, так и в headless-режиме, а контексты позволяют изолировать состояние для разных пользователей. Это даёт гибкость и позволяет организовать эффективные тесты, имитируя множество разных сценариев.