Найти в Дзене
IT-Teach

Playwright 2025: Исчерпывающий гайд + ответы на все спорные вопросы (FAQ)

Playwright — это современный кроссплатформенный фреймворк для автоматизации тестирования веб-приложений, разработанный компанией Microsoft. Он представляет собой мощный инструмент для end-to-end тестирования, который позволяет имитировать действия пользователя в различных браузерах, включая Chromium, Firefox и WebKit, через единый API. Playwright поддерживает несколько популярных языков программирования, включая Java, JavaScript/TypeScript, Python и C#, что делает его универсальным решением для различных проектов и команд разработки. Основная цель Playwright — обеспечить быстрое, надежное и кросс-браузерное тестирование с минимальными усилиями, предлагая при этом богатый набор функций и возможностей для создания комплексных тестовых сценариев. Фреймворк был создан командой, ранее разрабатывавшей Puppeteer, что объясняет многие сходства между этими инструментами. Playwright был изначально спроектирован как кроссплатформенное решение с расширенными возможностями, что делает его более уни
Оглавление
Playwright полный гайд 2025 г.
Playwright полный гайд 2025 г.

Что такое Playwright

Playwright — это современный кроссплатформенный фреймворк для автоматизации тестирования веб-приложений, разработанный компанией Microsoft. Он представляет собой мощный инструмент для end-to-end тестирования, который позволяет имитировать действия пользователя в различных браузерах, включая Chromium, Firefox и WebKit, через единый API. Playwright поддерживает несколько популярных языков программирования, включая Java, JavaScript/TypeScript, Python и C#, что делает его универсальным решением для различных проектов и команд разработки. Основная цель Playwright — обеспечить быстрое, надежное и кросс-браузерное тестирование с минимальными усилиями, предлагая при этом богатый набор функций и возможностей для создания комплексных тестовых сценариев.

Фреймворк был создан командой, ранее разрабатывавшей Puppeteer, что объясняет многие сходства между этими инструментами. Playwright был изначально спроектирован как кроссплатформенное решение с расширенными возможностями, что делает его более универсальным и мощным инструментом для автоматизации тестирования. Благодаря своей архитектуре и подходу к автоматизации, Playwright преодолевает многие ограничения традиционных инструментов, таких как Selenium, обеспечивая более стабильное и предсказуемое выполнение тестов.

Одной из ключевых особенностей Playwright является его способность работать не только в видимом режиме браузера, но и в headless-режиме, что особенно важно для интеграции в процессы непрерывной интеграции и доставки (CI/CD). Это позволяет запускать тесты быстро и эффективно, даже без графического интерфейса, что значительно ускоряет процесс тестирования и делает его более удобным для автоматизации.

Playwright browser
Playwright browser

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

>>> Программа профессионального обучения [Playwright на Java] <<<

Архитектура одной картинкой

Архитектура Playwright + webSocket
Архитектура Playwright + webSocket

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

Упрощенная архитектура Playwright состоит из нескольких ключевых компонентов:

1. Клиентская часть: Написана на выбранном языке программирования (например, Java) и отвечает за создание и выполнение тестовых сценариев. Клиентская библиотека предоставляет API для взаимодействия с браузерами и управления ими.

2. Серверная часть: Запускает браузер и управляет им через WebSocket. Сервер отвечает за выполнение команд, полученных от клиента, и возврат результатов. Каждый тип браузера (Chromium, Firefox, WebKit) имеет свой собственный сервер, который оптимизирован для работы с этим конкретным браузером.

3. Браузер: Выполняет команды, отправленные сервером. Playwright запускает экземпляр браузера и управляет им через DevTools Protocol или другие низкоуровневые протоколы. Это позволяет выполнять широкий спектр действий, от навигации по страницам до взаимодействия с элементами и выполнения JavaScript.

4. WebSocket соединение: Обеспечивает постоянную связь между клиентом и сервером. Это соединение используется для отправки команд и получения результатов, что позволяет эффективно управлять браузером и минимизировать задержки.

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

Главные отличие в архитектуре от Selenium

Playwright отличия от Selenium
Playwright отличия от Selenium

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

Playwright использует одно постоянное WebSocket-соединение, что позволяет отправлять команды пакетно и уменьшает точки отказа. Это не только повышает производительность, но и делает выполнение тестов более стабильным и предсказуемым. Кроме того, Playwright использует более современные протоколы, такие как DevTools Protocol, что обеспечивает более точный контроль над браузером и расширенные возможности автоматизации.

Еще одно важное отличие — поддержка нескольких браузеров из коробки. В то время как Selenium требует отдельных драйверов для каждого браузера, Playwright предоставляет единый API для работы с Chromium, Firefox и WebKit. Это упрощает настройку и использование, особенно при работе с различными браузерами и платформами.

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

Плюсы и минусы

Плюсы и минусы Playwright
Плюсы и минусы Playwright

Плюсы:

· Поддержка всех современных браузеров: Playwright поддерживает Chromium, Firefox и WebKit, что позволяет тестировать приложения во всех основных браузерах. Это обеспечивает полное покрытие и уверенность в том, что приложение будет работать корректно во всех средах.

· Кроссплатформенность: Playwright работает на Windows, Linux и macOS, что делает его универсальным решением для различных сред разработки и тестирования. Это особенно важно для команд, которые работают в гетерогенных средах.

· Автоматические ожидания (auto-wait) элементов: Playwright автоматически ожидает готовности элементов перед выполнением действий, что уменьшает необходимость в явных ожиданиях и делает тесты более стабильными. Это особенно полезно при работе с динамическими веб-приложениями, где элементы могут появляться или изменяться с задержкой.

· Высокая производительность и скорость выполнения тестов: Благодаря использованию WebSocket и оптимизированной архитектуре, Playwright выполняет тесты быстрее, чем многие традиционные инструменты. Это позволяет сократить время выполнения тестовых наборов и ускорить процесс разработки.

· Интеграция с CI/CD системами: Playwright легко интегрируется с популярными системами непрерывной интеграции и доставки, такими как Jenkins, GitHub Actions, GitLab CI и другими. Это позволяет автоматизировать процесс тестирования и включать его в pipeline сборки.

· Богатые возможности для отладки и трассировки: Playwright предоставляет различные инструменты для отладки тестов, включая трассировку, снимки экрана и видео запись выполнения тестов. Это упрощает идентификацию и исправление проблем.

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

· Расширенные возможности работы с сетью: Playwright позволяет перехватывать и модифицировать сетевые запросы, что полезно для тестирования API и имитации различных сетевых условий.

Минусы:

· Playwright является относительно новым инструментом по сравнению с Selenium, что означает меньшее сообщество и меньшее количество ресурсов для обучения и troubleshooting. Сообщество быстро растет, и документация постоянно улучшается.

· Playwright не поддерживает Internet Explorer, что может быть проблемой для проектов, которые требуют поддержки этого браузера. Учитывая, что Microsoft прекратила поддержку IE, это становится менее актуальным.

· Обучение: Для тех, кто привык к Selenium, переход на Playwright может потребовать времени на изучение новых концепций и API.

Сравнение с другими фреймворками

Сравнение Playwright с другими фреймворками
Сравнение Playwright с другими фреймворками

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

Общее сравнение с Selenium:

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

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

Сравнение с Puppeteer:

Puppeteer — это инструмент для автоматизации Chrome и Chromium, разработанный Google. Он предоставляет мощный API для управления браузером, но ограничен только Chromium-based браузерами. Playwright, будучи разработанным той же командой, что и Puppeteer, наследует многие его преимущества, но при этом поддерживает multiple browsers.

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

Сравнение с Cypress:

Cypress — это популярный фреймворк для end-to-end тестирования, который известен своей простотой использования и мощными возможностями отладки. Cypress имеет некоторые ограничения, такие как поддержка только Chromium-based браузеров и ограничения в работе с несколькими вкладками или доменами.

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

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

Переходим к практике. Установка и настройка

Подключение и установка Playwright & Первый запуск
Подключение и установка Playwright & Первый запуск

Для начала работы с Playwright необходимо добавить зависимость в проект Maven или Gradle. Это первый и основной шаг, который позволит использовать все возможности фреймворка в вашем проекте.

Кстати, если вы хотите полностью освоить Playwright, то есть отличный курс, где с нуля разбираются все аспекты фреймворка и демонстрируются лучшие практики автотестов.
>>> Посмотреть программу и записаться [Playwright на Java] <<<

Добавление зависимости в Maven:

Pom.xml maven
Pom.xml maven

Для проектов, использующих Maven, необходимо добавить следующую зависимость в файл pom.xml:

<dependency>
<groupId>com.microsoft.playwright</groupId>
<artifactId>playwright</artifactId>
<version>1.54.0</version>
</dependency>

После добавления зависимости, Maven автоматически загрузит все необходимые библиотеки. Убедитесь, что у вас установлена последняя версия Playwright, так как новые версии часто содержат исправления ошибок и новые функции.

Добавление зависимости в Gradle:

Gradle
Gradle

Для проектов, использующих Gradle, добавьте следующую зависимость в файл build.gradle:

groovy
dependencies {
implementation 'com.microsoft.playwright:playwright:1.54.0'
}

После добавления зависимости, синхронизируйте проект, чтобы Gradle загрузил все необходимые библиотеки.

Настройка проекта:

POM
POM

После добавления зависимости, рекомендуется настроить структуру проекта для тестов, придерживаясь Page Object Model. Создайте отдельную директорию для тестов, если это еще не сделано. Например, в Maven проектах тесты обычно размещаются в src/test/java.

Далее, создайте базовый класс для инициализации Playwright. Это поможет управлять состоянием браузера и контекста между тестами.

Пример базовой настройки:

import com.microsoft.playwright.*;
public class FirstTest {
protected Playwright playwright;
protected Browser browser;
protected BrowserContext context;
protected Page page;

@BeforeEach
public void setUp() {
playwright = Playwright.create();
browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false));
context = browser.newContext();
page = context.newPage();
}

@AfterEach
public void tearDown() {
if (page != null) {
page.close();
}
if (context != null) {
context.close();
}
if (browser != null) {
browser.close();
}
if (playwright != null) {
playwright.close();
}
}
}

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

Настройка браузеров:

Playwright позволяет запускать тесты в различных браузерах. По умолчанию, Playwright использует Chromium, но вы можете легко переключиться на Firefox или WebKit.

Пример запуска в Firefox:

browser = playwright.firefox().launch(new BrowserType.LaunchOptions().setHeadless(false));

Пример запуска в WebKit:

browser = playwright.webkit().launch(new BrowserType.LaunchOptions().setHeadless(false));

Вы также можете запускать браузеры в headless-режиме, что полезно для CI/CD сред. Для этого установите опцию setHeadless(true).

Настройка контекста браузера:

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

Пример настройки контекста:

context = browser.newContext(new Browser.NewContextOptions()
.setViewportSize(1920, 1080)
.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"));

Дополнительные настройки:

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

Пример настройки замедления:

browser = playwright.chromium().launch(new BrowserType.LaunchOptions()
.setHeadless(false)
.setSlowMo(100)); // Замедление на 100 мс между действиями

Интеграция с тестовыми фреймворками:

Playwright может быть легко интегрирован с популярными тестовыми фреймворками, такими как JUnit и TestNG. Это позволяет использовать все преимущества этих фреймворков, такие как управление тестами, отчетность и т.д.

Пример интеграции с JUnit:

Добавьте в pom.xml:

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.microsoft.playwright</groupId>
<artifactId>playwright</artifactId>
<version>1.54.0</version>
</dependency>

Создайте тестовый класс и добавьте код:

import com.microsoft.playwright.*;
import com.microsoft.playwright.options.AriaRole;
import com.microsoft.playwright.options.WaitForSelectorState;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.Collections;

import static org.junit.jupiter.api.Assertions.
assertEquals;
import static org.junit.jupiter.api.Assertions.
assertTrue;


/**
Этот тест:
Перехватывает запрос к /status_codes/404.
Подменяет статус ответа на 200 и тело на "Mocked Success Response".
Проверяет, что после клика по ссылке "404" отображается текст из мок-ответа.
*/
public class StatusCodeInterceptionTest {
Playwright playwright;
Browser browser;
BrowserContext context;
Page page;

@BeforeEach
void setUp() {
playwright = Playwright.
create();
browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(true));
context = browser.newContext();
page = context.newPage();

// Перехват запроса к /status_codes/404
context.route("**/status_codes/404",
route -> {
route.fulfill(new Route.FulfillOptions()
.setStatus(200)
.setHeaders(Collections.
singletonMap("Content-Type", "text/html"))
.setBody("<h3>Mocked Success Response</h3>")
);
});
}

@Test
void testMockedStatusCode() {
page.navigate("https://the-internet.herokuapp.com/status_codes");

// Клик по ссылке "404" (надёжный локатор)
page.getByRole(AriaRole.
LINK, new Page.GetByRoleOptions().setName("404")).click();

// Проверка мок-текста
Locator
text = page.locator("h3");
text.waitFor(new Locator.WaitForOptions()
.setState(WaitForSelectorState.
VISIBLE)
);
assertTrue(text.isVisible());
assertEquals("Mocked Success Response", text.textContent().trim());
}

@AfterEach
void tearDown() {
browser.close();
playwright.close();
}
}

Этот пример показывает, как можно использовать JUnit для создания и выполнения тестов с Playwright.

Если вы хотите не просто ознакомиться (в рамках этого гайда), а полностью освоить Playwright на Java с поддержкой ментора, то есть отличный курс. Тут с нуля разбираются все аспекты фреймворка и лучшие практики. Вы научитесь писать стабильные и быстрые UI, API и E2E-тесты.
>>> Посмотреть программу и записаться [Playwright на Java] <<<

Туториал Playwright

Tutorial Playwright
Tutorial Playwright

Локаторы и действия

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

Основные типы локаторов:

1. Локаторы по CSS селекторам: Это наиболее распространенный способ поиска элементов. Пример: page.locator("button.submit").

2. Локаторы по тексту: Позволяют найти элементы по их текстовому содержимому. Пример: page.locator("text=Submit").

3. Локаторы по XPath: Поддерживаются, но не рекомендуются, так как могут быть менее стабильными. Пример: page.locator("//button[@class='submit']").

4. Локаторы по ролям: Позволяют находить элементы по их ARIA-ролям. Пример: page.locator("role=button").

Взаимодействие с элементами:

После того как элемент найден с помощью локатора, вы можете выполнить над ним различные действия. Playwright предоставляет множество методов для взаимодействия с элементами.

Основные / базовые действия:

· click(): Клик по элементу.

· fill(value): Заполнение поля ввода указанным значением.

· check(): Отметка чекбокса.

· selectOption(value): Выбор опции в выпадающем списке.

· hover(): Наведение курсора на элемент.

· focus(): Установка фокуса на элемент.

· type(text): Ввод текста с имитацией клавиатурного ввода.

Пример использования:

// Найти кнопку по тексту и кликнуть на нее
page.locator("text=Submit").click();
// Найти поле ввода по placeholder и заполнить его
page.locator("[placeholder='Enter your name']").fill("John Doe");
// Найти чекбокс и отметить его
page.locator("#agree").check();
// Найти выпадающий список и выбрать опцию
page.locator("#country").selectOption("USA");

Цепочки действий:

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

Пример:

page.locator(".form-input").first().fill("First input");

Ожидание элементов:

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

Пример:

// Ждать появления элемента в течение 10 секунд
page.locator(".dynamic-element").waitFor(new Locator.WaitForOptions().setTimeout(10000));
// Проверить, видим ли элемент
boolean isVisible = page.locator(".element").isVisible();

Работа с несколькими элементами:

Если локатор находит несколько элементов, вы можете работать с ними по отдельности используя методы first(), last(), nth(index).

Пример:

// Получить первый элемент
Locator firstItem = page.locator(".list-item").first();
// Получить последний элемент
Locator lastItem = page.locator(".list-item").last();
// Получить элемент по индексу
Locator thirdItem = page.locator(".list-item").nth(2);

Assertions

Assertions в Playwright
Assertions в Playwright

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

Основные assertions:

· assertThat(locator).hasText(text): Проверяет, что элемент содержит указанный текст.

· assertThat(locator).isVisible(): Проверяет, что элемент видим.

· assertThat(locator).isHidden(): Проверяет, что элемент скрыт.

· assertThat(locator).isEnabled(): Проверяет, что элемент активен.

· assertThat(locator).isDisabled(): Проверяет, что элемент неактивен.

· assertThat(locator).isChecked(): Проверяет, что чекбокс или радиокнопка отмечены.

· assertThat(page).hasURL(url): Проверяет, что текущий URL страницы соответствует ожидаемому.

· assertThat(page).hasTitle(title): Проверяет, что заголовок страницы соответствует ожидаемому.

Пример использования:

import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
// Проверить текст элемента
assertThat(page.locator(".title")).hasText("Welcome to Playwright");
// Проверить видимость элемента
assertThat(page.locator(".button")).isVisible();
// Проверить URL страницы
assertThat(page).hasURL("https://playwright.dev");
// Проверить заголовок страницы
assertThat(page).hasTitle("Playwright");

Кастомные assertions:

Иногда встроенных assertions может быть недостаточно. В этом случае вы можете использовать стандартные assertions из JUnit или TestNG вместе с методами Playwright.

Пример с JUnit:

import org.junit.jupiter.api.Assertions;
// Проверить текст элемента с помощью JUnit
String text = page.locator(".title").textContent();
Assertions.assertEquals("Expected text", text);

Ожидания в assertions:

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

Таймаут по умолчанию для assertions составляет 5 секунд, но его можно изменить глобально или для конкретного assertion.

Пример изменения таймаута:

// Изменить таймаут для конкретного assertion
assertThat(page.locator(".slow-element"))
.hasText("Loaded", new Assertions.HasTextOptions().setTimeout(10000));

Изоляция тестов

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

Преимущества изоляции:

· Независимость тестов: Каждый тест выполняется в своей собственной среде, что означает, что сбои в одном тесте не влияют на другие тесты.

· Параллельное выполнение: Изоляция позволяет запускать тесты параллельно без помех, что значительно сокращает время выполнения.

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

Реализация изоляции в Playwright:

В Playwright изоляция достигается путем создания отдельного Browser Context для каждого теста. Browser Context — это изолированная сессия браузера, которая не делится данными с другими контекстами.

Пример:

import com.microsoft.playwright.*;
import org.junit.jupiter.api.*;
public class IsolatedTest {
static Playwright playwright;
static Browser browser;

@BeforeAll
static void launchBrowser() {
playwright = Playwright.create();
browser = playwright.chromium().launch();
}

@AfterAll
static void closeBrowser() {
playwright.close();
}

@Test
void testOne() {
// Создаем новый контекст для каждого теста
BrowserContext context = browser.newContext();
Page page = context.newPage();
page.navigate("https://example.com");
// Выполняем тест
context.close();
}

@Test
void testTwo() {
BrowserContext context = browser.newContext();
Page page = context.newPage();
page.navigate("https://example.com");
// Выполняем другой тест
context.close();
}
}

В этом примере каждый тест создает свой собственный Browser Context и закрывает его после завершения. Это гарантирует, что тесты не влияют друг на друга.

Использование хуков для изоляции:

Чтобы упростить управление контекстами, можно использовать хуки, предоставляемые тестовыми фреймворками, такими как JUnit или TestNG.

Пример с JUnit:

-13
public class TestIsolation {
BrowserContext context;
Page page;
@BeforeEach
void createContextAndPage() {
context = browser.newContext();
page = context.newPage();
}
@AfterEach
void closeContext() {
context.close();
}
@Test
void testExample() {
page.navigate("https://example.com");
// Тестовый код тут
}
}

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

Хуки

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

Типы хуков:

В JUnit 5 есть несколько аннотации для хуков:

· @BeforeAll: Выполняется один раз перед всеми тестами в классе. Используется для инициализации ресурсов, которые используются всеми тестами.

· @AfterAll: Выполняется один раз после всех тестов в классе. Используется для очистки ресурсов.

· @BeforeEach: Выполняется перед каждым тестом. Используется для настройки состояния перед каждым тестом.

· @AfterEach: Выполняется после каждого теста. Используется для очистки после каждого теста.

Пример использования хуков:

import com.microsoft.playwright.Browser;
import com.microsoft.playwright.BrowserContext;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Playwright;
import org.junit.jupiter.api.*;

public class HookExamples {
static Playwright playwright;
static Browser browser;
BrowserContext context;
Page page;

@BeforeAll
static void launchBrowser() {
playwright = Playwright.create();
browser = playwright.chromium().launch();
}

@AfterAll
static void closeBrowser() {
browser.close();
playwright.close();
}

@BeforeEach
void createContextAndPage() {
context = browser.newContext();
page = context.newPage();
}

@AfterEach
void closeContext() {
context.close();
}

@Test
void testOne() {
page.navigate("https://playwright.dev");
// Тестовый код
}

@Test
void testTwo() {
page.navigate("https://example.com");
// Тестовый код
}
}

В этом примере:

· launchBrowser() запускает браузер один раз перед всеми тестами.

· createContextAndPage() создает новый контекст и страницу перед каждым тестом.

· closeContext() закрывает контекст после каждого теста.

· closeBrowser() закрывает браузер после всех тестов.

Кастомные хуки:

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

Пример:

@BeforeEach
void setUp() {
createContextAndPage();
login(); // Кастомный метод для логина
}

@AfterEach
void tearDown() {
logout(); // Кастомный метод для логаута
closeContext();
}

Хуки в TestNG

-14

TestNG также предоставляет аналогичные аннотации для хуков:

· @BeforeSuite / @AfterSuite

· @BeforeTest / @AfterTest

· @BeforeClass / @AfterClass

· @BeforeMethod / @AfterMethod

Пример с TestNG:

import com.microsoft.playwright.Browser;
import com.microsoft.playwright.BrowserContext;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Playwright;
import org.junit.jupiter.api.Test;
import org.testng.annotations.*;

public class TestNGHooks {
Playwright playwright;
Browser browser;
BrowserContext context;
Page page;

@BeforeSuite
void launchBrowser() {
playwright = Playwright.create();
browser = playwright.chromium().launch();
}

@AfterSuite
void closeBrowser() {
browser.close();
playwright.close();
}

@BeforeMethod
void createContextAndPage() {
context = browser.newContext();
page = context.newPage();
}

@AfterMethod
void closeContext() {
context.close();
}

@Test
void testExample() {
page.navigate("https://example.com");
// Тестовый код
}
}

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

Командная строка

Command Line Interface
Command Line Interface

Playwright предоставляет CLI (Command Line Interface) для управления браузерами, запуска тестов и генерации кода. CLI является мощным инструментом, который упрощает многие аспекты работы с Playwright.

Установка браузеров:

При первом запуске теста Playwright (в контексте java) сам скачает и установит браузеры.

Если тесты компилируются с js то выполните следующую команду:

bash

npx playwright install

Эта команда установит все поддерживаемые браузеры (Chromium, Firefox, WebKit) и их зависимости. Если нужно установить только конкретный браузер, можно указать его:

bash

npx playwright install chromium

Запуск тестов:

Для запуска тестов используется команда в терминале, или кнопка в idea Run:

mvn test

Эта команда ищет тесты в директории tests по умолчанию, но можно указать другую директорию.

Debug (дебаг)

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

Playwright Inspector:

Playwright Inspector — это графический инструмент для отладки тестов. Он позволяет пошагово выполнять тесты, просматривать состояние страницы и inspect элементы.

Вызов метода page.pause():

В код теста можно добавить page.pause(), чтобы приостановить выполнение и открыть Inspector в момент вызова.

Пример:

page.navigate("https://example.com");
page.pause(); // Выполнение приостановится здесь
page.click("button");

Снимки экрана и видео:

Playwright позволяет автоматически захватывать скриншоты и видео во время выполнения теста. Это полезно для анализа падений (fail).

В коде теста можно сделать снимок экрана вручную:

page.screenshot(new Page.ScreenshotOptions().setPath("screenshot.png"));

Логирование:

Playwright интегрируется с logging frameworks, такими как SLF4J. Вы можете настроить логирование для получения подробной информации о выполнении тестов.

Пример настройки логирования в Java:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestWithLogging {
private static final Logger logger = LoggerFactory.getLogger(TestWithLogging.class);

@Test
void testWithLogging() {
logger.info("Navigating to page");
page.navigate("https://example.com");
logger.debug("Page title: {}", page.title());
}
}

Трассировка: Trace Viewer

Trace Viewer
Trace Viewer

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

Включение трассировки:

context.tracing().start(new Tracing.StartOptions()
.setScreenshots(true)
.setSnapshots(true));
// Выполнение теста
context.tracing().stop(new Tracing.StopOptions()
.setPath(Paths.get("trace.zip")));

Просмотр трассировки:

bash

npx playwright show-trace trace.zip

Использование трассировки делает тестирование более эффективным и помогает быстро выявить первопричину багов.

Параметры трассировки:

· screenshots: Включает снимки экрана.

· snapshots: Включает snapshots DOM.

· sources: Включает исходный код страницы.

· title: Задает название для трассировки.

Автоматическая трассировка:

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

Возможные значения для trace:

· 'on': Записывать трассировку для каждого теста.

· 'off': Не записывать.

Просмотр трассировки:

Для просмотра трассировки используется команда:

bash

npx playwright show-trace trace.zip

Это откроет Trace Viewer, который позволяет изучить временную шкалу трассировки, просматривать скриншоты, моментальные снимки DOM и анализировать сетевые запросы.

Архив trace.zip по умолчанию сохраняется в корне проекта!

Анализ трассировки:

Trace Viewer предоставляет несколько инструментов для анализа (см. скрин Trace Viewer):

· Timeline: Показывает последовательность действий и событий.

· Screenshots: Позволяет просмотреть снимки экрана в различные моменты времени.

· DOM Snapshot: Показывает состояние DOM в конкретный момент.

· Network: Отображает сетевые запросы и их details.

· Console: Показывает сообщения консоли.

Использование трассировки для отладки:

Трассировка особенно полезна для отладки flaky тестов или нестабильных тестов в CI. Изучая трассировку, можно определить основную причину проблем с синхронизацией, задержка в сети или неожиданные всплывающие окна.

Ограничения:

Трассировка может создавать большие файлы, особенно при включении снимков экрана и snapshots. Поэтому рекомендуется включать трассировку только когда это действительно нужно и очищать старые трассировки.

Несмотря на это, трассировка является бесценным инструментом для получения информации о выполнении тестов и устранения сложных неполадок.

Репорты: Встроенные, внешние, кастомные

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

Встроенные репортеры:

Playwright предоставляет несколько встроенных функций для создания отчетов о тестировании:

· HTML Reporter: Генерирует интерактивный HTML-отчет с деталями выполнения тестов, включая снимки экрана и трассировки.

· JSON Reporter: Сохраняет результаты в JSON-формате, который может быть обработан другими инструментами.

· JUnit Reporter: Генерирует отчеты в формате JUnit XML, который совместим со многими CI/CD системами.

· List Reporter: Выводит результаты в консоль в виде списка.

Внешние:

Allure интеграция с Playwright.
Allure интеграция с Playwright.

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

  • Allure Playwright: Для интеграции с проектом например с Java необходимо добавить зависимость в ваш проект (например, в Maven или Gradle). Allure репортер собирает метаданные во время выполнения тестов, а затем генерирует из них полноценный HTML-отчет.
  • Как это работает: Playwright выполняется и генерирует данные (в формате JSON) для Allure. После прогона тестов запускается Allure CLI, который преобразует эти данные в интерактивный web-отчет.

Ключевые преимущества для внешних отчетов:
Богатая визуализация: Группировка тестов по функциональности, эпикам, сьютам.
Детализация шагов: Attachments (шаги, скриншоты, трассировки) автоматически добавляются в отчет.
История запусков: Возможность отслеживать историю выполнения теста для выявления flaky-тестов.
Интеграция с CI: Отчеты легко встраиваются в конвейеры непрерывной интеграции (Jenkins, TeamCity, GitLab CI и т. д.).

Пример настройки для Maven (pom.xml):
Для использования необходимо добавить зависимость и настроить плагин.

<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-playwright</artifactId>
<version>2.24.0</version>
<scope>test</scope>
</dependency>

Кастомные репорты:

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

Пример кастомного репортера на Java:

Используйте TestNG-листенеры или JUnit 5 Extension для перехвата событий.

public class CustomReportListener implements ITestListener {
private static final List<TestResult> results = new ArrayList<>();
@Override
public void onTestSuccess(ITestResult result) {
results.add(new TestResult(
result.getName(),
"Passed",
result.getEndMillis() - result.getStartMillis(),
null
));
}
@Override
public void onTestFailure(ITestResult result) {
results.add(new TestResult(
result.getName(),
"Failed",
result.getEndMillis() - result.getStartMillis(),
result.getThrowable().getMessage()
));
}
public static List<TestResult> getResults() {
return results;
}
}
class TestResult {
String name;
String status;
long duration;
String error;
public TestResult(String name, String status, long duration, String error) {
this.name = name;
this.status = status;
this.duration = duration;
this.error = error;
}
}

Интеграция с CI/CD:

Отчеты могут быть интегрированы с системами CI/CD для лучшей визуализации. Например, в GitHub Actions можно загружать артефакты отчетов.

Пример workflow для GitHub Actions:

yaml

name: Playwright Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: lts/*
- run: npm ci
- run: npx playwright install --with-deps
- run: npx playwright test
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: playwright-report
path: playwright-report/
retention-days: 30

Этот workflow запускает тесты и загружает HTML-отчет как артефакт, который можно скачайте и просмотрите позже.

Playwright Codegen: Генерация кода для тестов

Playwright Codegen
Playwright Codegen

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

Запуск генератора:

Чтобы запустить Codegen, используйте команду:

bash

npx playwright codegen [url]

Пример:

bash

npx playwright codegen https://example.com

Это откроет браузер и окно Codegen. Все действия, выполненные в браузере, будут записываться и отображаться в виде кода на выбранном языке программирования.

Выбор языка:

По умолчанию Codegen генерирует код на JavaScript, но можно выбрать другой язык с помощью опции --target или в интерфейсе Playwright Inspector.

Пример для Java:

bash

npx playwright codegen https://the-internet.herokuapp.com/login

Запись действий:

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

Пример сгенерированного кода на Java:

import com.microsoft.playwright.*;
import com.microsoft.playwright.options.AriaRole;

public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions()
.setHeadless(false));
BrowserContext context = browser.newContext();
Page page = context.newPage();
page.navigate("https://example.com/");
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("More information...")).click();
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Documentation")).click();
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Getting started")).click();
}
}
}

Сохранение кода:

Сгенерированный код можно скопировать и вставить в idea для дальнейшего использования. Это служит хорошей основой для создания более сложных тестов.

Ограничения:

Codegen это отличный инструмент для генерации базового тестового кода, который, возможно, не охватывает все сценарии. Например, возможные взаимодействия или динамические изменения могут потребовать ручного кодирования. Также, сгенерированный код может нуждаться в доработке, чтобы соответствовать лучшим практикам, таким как использование Page Object Model.

Интеграция с IDE:

Некоторые IDE предлагают плагины для Playwright которые включают в себя возможности генерации кода. Это может еще больше упростить процесс создания тестов. Несмотря на некоторые ограничения, Codegen является ценным инструментом для ускорения разработки тестов и изучения API Playwright.

Docker интеграция с Playwright

Docker с Playwright
Docker с Playwright

Запуск тестов Playwright в Docker-контейнерах обеспечивает изолированную, воспроизводимую и согласованную среду выполнения, что особенно важно для непрерывной интеграции (CI) и кросс-платформенного тестирования.

Playwright предоставляет официальные Docker-образы, которые включают все необходимые системные зависимости для браузеров. Для Java-проектов рекомендуется использовать образы с тегом java, например, mcr.microsoft.com/playwright/java:v1.55.0-noble (актуальная версия может меняться).

Базовый Dockerfile

Для контейнеризации вашего Maven-проекта создайте Dockerfile в корне проекта:

Dockerfile:

# Используем официальный образ Playwright для Java
FROM mcr.microsoft.com/playwright/java:v1.55.0-noble

# Устанавливаем рабочую директорию
WORKDIR /app

# Копируем исходный код и pom.xml
COPY pom.xml ./
COPY src ./src/

# Устанавливаем зависимости и запускаем тесты
RUN mvn clean test

Сборка и запуск

  1. Соберите образ: bash docker build -t playwright-java-tests .
  2. Запустите контейнер: bash docker run --rm playwright-java-tests
    Для отладки в headed-режиме (с отображением браузера) добавьте флаги: -e HEADED=true и установите Xvfb5.

Рекомендуемая конфигурация

Для стабильной работы рекомендуется использовать следующие флаги при запуске контейнера:

  • --ipc=host: Предотвращает падение Chromium из-за нехватки памяти.
  • --init: Позволяет корректно обрабатывать сигналы завершения работы, избегая появления "зомби"-процессов.
  • --security-opt seccomp=seccomp_profile.json: Повышает безопасность при работе с ненадежным кодом, используя профиль seccomp.

После интеграции Playwright с Docker тесты в контейнере могут быть запущены параллельно, что существенно сокращает время выполнения, повышая производительность. Подробно объясняется здесь.

Интеграция с CI/CD

Официальные образы легко интегрируются с популярными CI-системами (GitHub Actions, GitLab CI, Jenkins). В конфигурации workflow просто укажите соответствующий образ контейнера.

Пример для GitHub Actions:

yaml
jobs:
test:
runs-on: ubuntu-latest
container:
image: mcr.microsoft.com/playwright/java:v1.55.0-noble
steps:
- uses: actions/checkout@v4
- name: Run Tests
run: mvn test

Советы и лучшие практики

Лучшие практики Playwright.
Лучшие практики Playwright.

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

1. Используйте Page Object Model (POM)

// Пример Page Object для страницы логина
public class LoginPage {
private final Page page;
private final LocatorusernameInput;
private final LocatorpasswordInput;
private final LocatorsubmitButton;
public LoginPage(Page page) {
this.page = page;
this.usernameInput = page.locator("#username");
this.passwordInput = page.locator("#password");
this.submitButton = page.locator("button[type='submit']");
}
public void navigate() {
page.navigate("https://example.com/login");
}
public void login(String username, String password) {
usernameInput.fill(username);
passwordInput.fill(password);
submitButton.click();
}
}
// Использование в тесте
@Test
public void testLogin() {
LoginPageloginPage = new LoginPage(page);
loginPage.navigate();
loginPage.login("testuser", "password123");
// Assertions тут
}

2. Используйте правильные стратегии локаторов
Избегайте нестабильных селекторов, которые могут измениться. Вместо этого используйте устойчивые локаторы, такие как те, что основаны на ролях ARIA или тестовых атрибутах (например, data-testid).

// Плохо: не стабильный CSS-селектор
page.locator("#main > div > div:nth-child(3) > button").click();
// Хорошо: локатор по роли
page.locator("role=button[name='Submit']").click();
// Лучше: использование тестовых атрибутов
page.locator("[data-testid='submit-button']").click();

3. Реализуйте автоматические ожидания вместо явных пауз
Playwright имеет встроенные ожидания, поэтому избегайте использования Thread.sleep() .

// Плохо: явная пауза
page.click("#button");
Thread.sleep(3000); // Непредсказуемое и медленное
// Хорошо: использование встроенных ожиданий
page.locator("#button").click();
assertThat(page).hasURL("https://example.com/success"); // Автоматически ждет

4. Организуйте тесты с помощью хуков
Используйте возможности фреймворка тестирования (например, JUnit) для организации кода.

public class TestBase {
protected Playwrightplaywright;
protected Browserbrowser;
protected BrowserContextcontext;
protected Page page;
@BeforeAll
public void beforeAll() {
playwright = Playwright.create();
}
@AfterAll
public void afterAll() {
playwright.close();
}
@BeforeEach
public void beforeEach() {
browser = playwright.chromium().launch();
context = browser.newContext();
page = context.newPage();
}
@AfterEach
public void afterEach() {
context.close();
browser.close();
}
}

5. Настройте трассировку для отладки сложных сценариев
Включите трассировку для сложных тестов, чтобы облегчить отладку.

@Test
public void complexTest() {
context.tracing().start(new Tracing.StartOptions()
.setScreenshots(true)
.setSnapshots(true));
try {
// Выполнение сложного теста
page.navigate("https://example.com");
// ... действия ...
} finally {
context.tracing().stop(new Tracing.StopOptions()
.setPath(Paths.get("trace.zip")));
}
}

6. Используйте изоляцию через Browser Contexts
Каждый тест должен запускаться в своем собственном Browser Context для обеспечения изоляции.

@BeforeEach
public void setUp() {
// Каждый тест получает новый изолированный контекст
context =browser.newContext();
page = context.newPage();
}
@AfterEach
public void tearDown() {
context.close();
}

7. Оптимизируйте производительность тестов
Используйте headless-режим для CI/CD и настройте параллельное выполнение тестов.

// Запуск в headless-режиме для CI
browser =playwright.chromium().launch(new BrowserType.LaunchOptions()
.setHeadless(true));

8. Регулярно обновляйте Playwright
Следите за обновлениями и регулярно обновляйте версию бибилиотек Playwright для получения новых функций и исправлений ошибок.

Следование этим лучшим практикам поможет вам создавать более надежные, поддерживаемые и эффективные тесты с использованием Playwright.

Рекомендации по миграции

1. Начните с малого: Мигрируйте постепенно, начиная с простых тестов.

2. Используйте обертки: Создайте абстракции для общих методов упрощения миграции.

3. Тестируйте внимательно: Убедитесь, что перенесенные тесты корректно работают во всех браузерах.

4. Используйте возможности Playwright: Воспользуйтесь преимуществами новых функций, таких как трассировка и сетевые перехватчики.

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

FAQ: ответы на частые вопросы по Playwright

-21

Playwright vs Selenium что лучше?

Playwright автоматически проверяет готовность элементов перед действиями, что повышает стабильность тестов. В Selenium для этого используются явные/неявные ожидания. Сценарии Playwright выполняются быстрее.

-22

Тестирование API в Playwright поддерживается?

Да, Playwright отлично подходит для тестирования API.

-23

Поддерживаемые браузеры и ОС ?

Браузеры: Chromium, Firefox, WebKit (последние версии). ОС: Windows 10+, macOS 10.14+, Ubuntu 18.04+, Debian 10+. Мобильные устройства: Playwright может эмулировать различные устройства, указывая setDeviceScaleFactor, setHasTouch, setIsMobile, setScreenSize setUserAgent, setViewportSize и опции при создании контекста с помощью Browser.newContext()... . Docker: есть официальная поддержка.

-24

Как запустить первый теста Playwright ?

Установите Playwright, создайте файл, импортируйте библиотеку, напишите тест с использованием контекста браузера.

-25

Инструменты Playwright ?

Использует Playwright API для взаимодействия с браузерами и Playwright Test как тест-раннер для организации и выполнения тестов.

-26

Требуются ли навыки программирования для работы с playwright?

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

-27

Основан ли Playwright на Selenium?

Нет. Это независимый современный фреймворк от Microsoft с кроссбраузерной поддержкой и повышенной производительностью.

-28

Поддерживаемые языки в Playwright ?

JavaScript, Python, Java, C#.

-29

Как диагностировать проблемы отзывчивости ?

Можно замерять время операций. Инструмент Trace записывает выполнение теста. Треки можно анализировать в Chrome DevTools.

-30

Работа с диалоговыми окнами браузера поддерживается?

Да. Есть API для обработки окон загрузки файлов (приём/отмена) и вставки файлов в input-элементы.

-31

Параллельный запуск тестов поддерживается?

Да, тест-раннеры поддерживают параллельное выполнение. Подробнее тут.

-32

Клик по отключенной кнопке возможен?

Playwright будет ждать активации кнопки до истечения таймаута теста.

-33

Принцип работы Auto-Waiting в чем заключается?

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

-34

Отличие waitForNavigation от Auto-Waiting ?

waitForNavigation явно ожидает событие навигации (например, после клика на многостраничной форме).

Auto-Waiting гарантирует готовность элемента, но не отслеживает навигацию.

-35

Обработка ошибок SSL возможна?

Через опцию ignoreHTTPSErrors: true при запуске браузера.

-36

Принудительный клик (force:true) - реализуемо?

Аналог: page.click({ force: true }). Обходит проверки Auto-Waiting.

-37

Вывод ошибок при падении теста?

В виде исключений с детальными логами действий.

-38

Интеграция с JUnit/TestNG поддерживается?

Да, отлично интегрируется.

-39

Интеграция с Cucumber?

Да, поддерживается. Улучшает читаемость тестов.

-40

Интеграция с TestRail есть?

Да, возможна.

-41

Запуск через GitHub Actions существует?

Да, существуют готовые Actions для облачного запуска.

-42

Перспективы Java-версии Playwright в будущем?

Java-версия активно развивается. Playwright предлагает более мощные возможности чем WebDriver-решения и подходит для корпоративных фреймворков.

-43

Как установить Playwright?

Для проектов Maven добавьте зависимость в pom.xml:

<dependency>
<groupId>com.microsoft.playwright</groupId>
<artifactId>playwright</artifactId>
<version>1.54.0</version> <!-- Актуальная версия -->
</dependency>

Playwright автоматически управляет браузерами.

Для начальной настройки запустите:

mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args="install"

(или используйте playwright install через npm CLI).

-44

Как настроить контекст браузера (например, размер окна, язык)?

Используйте BrowserContext с опциями:

BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setViewportSize(1920, 1080)
.setLocale("de-DE")
.setPermissions(List.of("geolocation")) );
Page page = context.newPage();
-45

Как работать с iframe?

Получите Frame объекта page.frames() или по селектору:

Frame frame = page.frame("frame-name"); // По имени/ID
// Или: FrameLocator frameLocator = page.frameLocator(".iframe-class").locator("button");
frameLocator.click();
-46

Как делать скриншоты и записи видео?

Скриншот:

page.screenshot(new Page.ScreenshotOptions()
.setPath(Paths.get("screenshot.png")));

Видео: включите запись при создании контекста

BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setRecordVideoDir(Paths.get("videos/"))); // После теста видео сохранится автоматически.
-47

Как эмулировать мобильные устройства (без эмулятора ОС)?

Используйте встроенные девайс-профили (доступно для js):

Для Java профили настраиваются самостоятельно.
-48

Как выполнить JavaScript на странице?

Используйте page.evaluate():

Object result = page.evaluate("() => window.scrollY"); // Возвращает значение
// Или:
page.evaluate("() => document.body.style.backgroundColor = 'red'");
-49

Как работать с куки (cookies)?

Получение всех куки контекста:

List<Cookie> cookies = context.cookies();

Установка куки:

context.addCookies(Arrays.asList( new Cookie("name", "value").setDomain(".example.com").setPath("/") ));
-50

Как тестировать загрузку файлов?

Дождитесь события download:

Download download = page.waitForDownload(() -> { page.locator("#downloadButton").click(); });
download.saveAs(Paths.get("downloaded_file.txt"));
-51

Как организовать Page Object Model (POM) в Playwright?

Создайте классы, инкапсулирующие страницы/компоненты:

public class LoginPage {
private final Page page;
private final Locator usernameField;
private final Locator passwordField;
private final Locator submitButton;
public LoginPage(Page page) {
this.page = page;
usernameField = page.locator("#username");
passwordField = page.locator("#password");
submitButton = page.locator("#login");
}
public void login(String user, String pass) {
usernameField.fill(user);
passwordField.fill(pass);
submitButton.click();
}
}

*Подробный разбор здесь.

-52

Как использовать пользовательские ожидания (custom waits)?

Используйте page.waitForCondition():

page.waitForCondition(() -> page.evaluate("() => document.readyState").equals("complete") );
// Или для локатора:
page.locator(".spinner").waitFor(new Locator.WaitForOptions()
.setState(WaitForSelectorState.HIDDEN));
-53

Как перехватывать сетевые запросы/ответы?

Подпишитесь на события request и response:

page.onRequest(request -> System.out.println(">> " + request.method() + " " + request.url()) );
page.onResponse(response -> System.out.println("<< " + response.status() + " " + response.url()) );
-54

Как тестировать веб-сокеты (WebSockets)?

Дождитесь события websocket и взаимодействуйте:

WebSocket ws = page.waitForWebSocket(() -> page.click("#start-websocket-button") );
ws.sendText("ping"); ws.onMessage(message -> System.out.println("Received: " + message.text()) );
-55

Как интегрировать Playwright с Allure Report?

Используйте JUnit 5/TestNG и адаптеры Allure. Добавьте аннотации и прикрепляйте артефакты:

@Test
@DisplayName("Проверка логина")
@Attachment(type = "image/png", value = "screenshot")
public byte[] testLogin() {
// ... код теста
return page.screenshot(); // Скриншот в отчет
}
-56

Как использовать Playwright в Docker?

Используйте официальный образ Dockerfile:

FROM mcr.microsoft.com/playwright/java:v1.42.0-jammy
COPY . /app
WORKDIR /app
RUN mvn install CMD ["mvn", "test"]

*Детальная интеграция Playwright с Docker есть в этом обучающем материале.

Убедитесь, что в тестах включен headless-режим:

Browser browser = playwright
.chromium()
.launch( new BrowserType.LaunchOptions()
.setHeadless(true) );
-57

Как тестировать Shadow DOM?

Используйте locator() с селектором, проникающим в Shadow Root:

Locator shadowButton = page.locator("my-component::shadow(button#inner-button)");
shadowButton.click();
-58

Как работать с базой данных в тестах?

Playwright не управляет БД напрямую. Используйте JDBC или ORM (Hibernate) в тестах:

try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS)) {
Statement stmt = conn.createStatement();
stmt.executeUpdate("DELETE FROM users WHERE username = 'test_user'");
}
-59

Как генерировать случайные тестовые данные?

Используйте библиотеки (Faker):

Faker faker = new Faker();
String email = faker.internet()
.emailAddress();
page.locator("#email")
.fill(email);

Полезные ресурсы

Полный курс обучения: Автоматизация тестирования с Playwright на Java

Что вас ждет на курсе:

Программа курса обучения Playwright.
Программа курса обучения Playwright.

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

Смотрите также подробный видео разбор Playwright: Полное Руководство по Автоматизации Тестирования [От Новичка до Эксперта]

👋👋👋