Открытие и закрытие страниц

Playwright предоставляет мощные инструменты для работы с браузером в автоматическом тестировании. Одной из ключевых возможностей является управление страницами: открытие новых страниц, переходы по ссылкам, а также их закрытие. Эти операции являются основой для большинства тестов, где требуется взаимодействовать с различными частями веб-приложения.

Открытие новой страницы

В Playwright создание новой страницы выполняется с помощью метода browser.newPage(). Этот метод открывает новую вкладку в браузере и возвращает объект страницы, который можно использовать для выполнения дальнейших операций.

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

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  // Дополнительные действия на странице
})();

После вызова newPage() объект страницы готов к использованию. Например, можно перейти на нужный URL с помощью метода page.goto(url), который загружает указанную веб-страницу. Важно помнить, что переходы между страницами блокируют выполнение следующих шагов до тех пор, пока страница не загрузится полностью, что позволяет избежать ошибок синхронизации.

Открытие страницы в новой вкладке или окне

Для открытия страницы в новой вкладке или окне браузера достаточно вызвать browser.newPage(). В отличие от открытия новой страницы в текущем окне, Playwright позволяет управлять множеством вкладок одновременно, обеспечивая гибкость при автоматизации.

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

(async () => {
  const browser = await chromium.launch();
  const page1 = await browser.newPage();
  await page1.goto('https://example.com');

  const page2 = await browser.newPage();
  await page2.goto('https://example.org');
})();

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

Параметры запуска браузера

При запуске браузера можно указать дополнительные параметры, чтобы управлять поведением окон и страниц. Например, параметр headless контролирует, будет ли браузер запускаться в режиме без графического интерфейса (что ускоряет тесты).

const browser = await chromium.launch({ headless: false });

Также можно задать дополнительные параметры для управления размером окна или включить/выключить автоматические действия браузера.

Закрытие страниц

После того как тест выполнен, важно корректно закрыть страницы, чтобы освободить ресурсы. Для этого используется метод page.close(), который закрывает текущую страницу. Этот метод можно вызвать после того, как все действия на странице завершены.

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

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');

  // Действия на странице

  await page.close();  // Закрыть страницу после завершения
})();

Если необходимо закрыть все страницы и завершить работу с браузером, можно использовать метод browser.close(). Этот метод завершает сессию и закрывает все открытые вкладки, освобождая ресурсы.

await browser.close();

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

Работа с несколькими страницами и вкладками

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

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

(async () => {
  const browser = await chromium.launch();
  const page1 = await browser.newPage();
  const page2 = await browser.newPage();

  await page1.goto('https://example.com');
  await page2.goto('https://example.org');

  // Взаимодействие с двумя вкладками
  const title1 = await page1.title();
  const title2 = await page2.title();

  console.log(`Title of page1: ${title1}`);
  console.log(`Title of page2: ${title2}`);

  await page1.close();
  await page2.close();
  await browser.close();
})();

В этом примере создаются две вкладки, и для каждой из них выполняется набор действий. Важно правильно отслеживать, с какой вкладкой происходит взаимодействие, чтобы избежать ошибок.

Обработка событий при открытии и закрытии страниц

Playwright позволяет подписываться на события, связанные с открытием и закрытием страниц. Например, событие page.on('close') может быть использовано для обработки логики при закрытии страницы.

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

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();

  page.on('close', () => {
    console.log('Страница была закрыта');
  });

  await page.goto('https://example.com');
  await page.close();
  await browser.close();
})();

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

Заключение

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