Что такое 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 также предлагает расширенные возможности для работы с сетевыми запросами, имитации различных устройств и условий сети, что делает его идеальным инструментом для тестирования современных веб-приложений, которые должны работать в разнообразных условиях и на различных устройствах. Благодаря этим возможностям, разработчики и тестировщики могут создавать более надежные и комплексные тесты, которые охватывают широкий спектр сценариев использования.
>>> Программа профессионального обучения [Playwright на Java] <<<
Архитектура одной картинкой
Архитектура 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 заключается в использовании WebSocket вместо HTTP для коммуникации между клиентом и браузером. Selenium отправляет каждую команду как отдельный HTTP-запрос, что приводит к задержкам и нестабильности из-за постоянного установления и разрыва соединений. Это может стать проблемой при выполнении больших тестовых наборов, где количество команд может быть очень большим.
Playwright использует одно постоянное WebSocket-соединение, что позволяет отправлять команды пакетно и уменьшает точки отказа. Это не только повышает производительность, но и делает выполнение тестов более стабильным и предсказуемым. Кроме того, Playwright использует более современные протоколы, такие как DevTools Protocol, что обеспечивает более точный контроль над браузером и расширенные возможности автоматизации.
Еще одно важное отличие — поддержка нескольких браузеров из коробки. В то время как Selenium требует отдельных драйверов для каждого браузера, Playwright предоставляет единый API для работы с Chromium, Firefox и WebKit. Это упрощает настройку и использование, особенно при работе с различными браузерами и платформами.
Playwright также предлагает встроенные автоматические ожидания, которые устраняют необходимость в явных ожиданиях (sleeps) в тестах. Это делает тесты более стабильными и уменьшает вероятность ложных срабатываний из-за временных задержек или асинхронного поведения страницы. В Selenium разработчики часто вынуждены использовать явные ожидания или ожидания условий, что усложняет код и может привести к нестабильности тестов.
Плюсы и минусы
➕ Плюсы:
· Поддержка всех современных браузеров: 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 часто сравнивают с другими популярными фреймворками для автоматизации тестирования, такими как 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 необходимо добавить зависимость в проект Maven или Gradle. Это первый и основной шаг, который позволит использовать все возможности фреймворка в вашем проекте.
Кстати, если вы хотите полностью освоить Playwright, то есть отличный курс, где с нуля разбираются все аспекты фреймворка и демонстрируются лучшие практики автотестов.
>>> Посмотреть программу и записаться [Playwright на Java] <<<
Добавление зависимости в Maven:
Для проектов, использующих Maven, необходимо добавить следующую зависимость в файл pom.xml:
<dependency>
<groupId>com.microsoft.playwright</groupId>
<artifactId>playwright</artifactId>
<version>1.54.0</version>
</dependency>
После добавления зависимости, Maven автоматически загрузит все необходимые библиотеки. Убедитесь, что у вас установлена последняя версия Playwright, так как новые версии часто содержат исправления ошибок и новые функции.
Добавление зависимости в Gradle:
Для проектов, использующих Gradle, добавьте следующую зависимость в файл build.gradle:
groovy
dependencies {
implementation 'com.microsoft.playwright:playwright:1.54.0'
}
После добавления зависимости, синхронизируйте проект, чтобы Gradle загрузил все необходимые библиотеки.
Настройка проекта:
После добавления зависимости, рекомендуется настроить структуру проекта для тестов, придерживаясь 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
Локаторы и действия
Локаторы — это центральная концепция 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 используются для проверки условий на странице. Они автоматически ожидают выполнения условий, что делает тесты более стабильными. 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:
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
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");
// Тестовый код
}
}
Использование хуков помогает поддерживать тесты в чистоте и обеспечивает надлежащее управление ресурсами, что необходимо для надежного выполнения тестов.
Командная строка
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
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: Выводит результаты в консоль в виде списка.
Внешние:
Для получения более детализированных и визуально насыщенных отчетов 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, используйте команду:
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
Запуск тестов 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
Сборка и запуск
- Соберите образ: bash docker build -t playwright-java-tests .
- Запустите контейнер: 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 требует не только знания его 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
Playwright vs Selenium что лучше?
Playwright автоматически проверяет готовность элементов перед действиями, что повышает стабильность тестов. В Selenium для этого используются явные/неявные ожидания. Сценарии Playwright выполняются быстрее.
Тестирование API в Playwright поддерживается?
Да, Playwright отлично подходит для тестирования API.
Поддерживаемые браузеры и ОС ?
Браузеры: Chromium, Firefox, WebKit (последние версии). ОС: Windows 10+, macOS 10.14+, Ubuntu 18.04+, Debian 10+. Мобильные устройства: Playwright может эмулировать различные устройства, указывая setDeviceScaleFactor, setHasTouch, setIsMobile, setScreenSize setUserAgent, setViewportSize и опции при создании контекста с помощью Browser.newContext()... . Docker: есть официальная поддержка.
Как запустить первый теста Playwright ?
Установите Playwright, создайте файл, импортируйте библиотеку, напишите тест с использованием контекста браузера.
Инструменты Playwright ?
Использует Playwright API для взаимодействия с браузерами и Playwright Test как тест-раннер для организации и выполнения тестов.
Требуются ли навыки программирования для работы с playwright?
Нет. Playwright позволяет автоматизировать тесты без углубленных знаний кода.
Основан ли Playwright на Selenium?
Нет. Это независимый современный фреймворк от Microsoft с кроссбраузерной поддержкой и повышенной производительностью.
Поддерживаемые языки в Playwright ?
JavaScript, Python, Java, C#.
Как диагностировать проблемы отзывчивости ?
Можно замерять время операций. Инструмент Trace записывает выполнение теста. Треки можно анализировать в Chrome DevTools.
Работа с диалоговыми окнами браузера поддерживается?
Да. Есть API для обработки окон загрузки файлов (приём/отмена) и вставки файлов в input-элементы.
Параллельный запуск тестов поддерживается?
Да, тест-раннеры поддерживают параллельное выполнение. Подробнее тут.
Клик по отключенной кнопке возможен?
Playwright будет ждать активации кнопки до истечения таймаута теста.
Принцип работы Auto-Waiting в чем заключается?
Автоматически ожидает готовность элемента (видимость, стабильность, возможность взаимодействия). Для асинхронно активируемых элементов периодически проверяет состояние.
Отличие waitForNavigation от Auto-Waiting ?
waitForNavigation явно ожидает событие навигации (например, после клика на многостраничной форме).
Auto-Waiting гарантирует готовность элемента, но не отслеживает навигацию.
Обработка ошибок SSL возможна?
Через опцию ignoreHTTPSErrors: true при запуске браузера.
Принудительный клик (force:true) - реализуемо?
Аналог: page.click({ force: true }). Обходит проверки Auto-Waiting.
Вывод ошибок при падении теста?
В виде исключений с детальными логами действий.
Интеграция с JUnit/TestNG поддерживается?
Да, отлично интегрируется.
Интеграция с Cucumber?
Да, поддерживается. Улучшает читаемость тестов.
Интеграция с TestRail есть?
Да, возможна.
Запуск через GitHub Actions существует?
Да, существуют готовые Actions для облачного запуска.
Перспективы Java-версии Playwright в будущем?
Java-версия активно развивается. Playwright предлагает более мощные возможности чем WebDriver-решения и подходит для корпоративных фреймворков.
Как установить 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).
Как настроить контекст браузера (например, размер окна, язык)?
Используйте BrowserContext с опциями:
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setViewportSize(1920, 1080)
.setLocale("de-DE")
.setPermissions(List.of("geolocation")) );
Page page = context.newPage();
Как работать с iframe?
Получите Frame объекта page.frames() или по селектору:
Frame frame = page.frame("frame-name"); // По имени/ID
// Или: FrameLocator frameLocator = page.frameLocator(".iframe-class").locator("button");
frameLocator.click();
Как делать скриншоты и записи видео?
Скриншот:
page.screenshot(new Page.ScreenshotOptions()
.setPath(Paths.get("screenshot.png")));
Видео: включите запись при создании контекста
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setRecordVideoDir(Paths.get("videos/"))); // После теста видео сохранится автоматически.
Как эмулировать мобильные устройства (без эмулятора ОС)?
Используйте встроенные девайс-профили (доступно для js):
Для Java профили настраиваются самостоятельно.
Как выполнить JavaScript на странице?
Используйте page.evaluate():
Object result = page.evaluate("() => window.scrollY"); // Возвращает значение
// Или:
page.evaluate("() => document.body.style.backgroundColor = 'red'");
Как работать с куки (cookies)?
Получение всех куки контекста:
List<Cookie> cookies = context.cookies();
Установка куки:
context.addCookies(Arrays.asList( new Cookie("name", "value").setDomain(".example.com").setPath("/") ));
Как тестировать загрузку файлов?
Дождитесь события download:
Download download = page.waitForDownload(() -> { page.locator("#downloadButton").click(); });
download.saveAs(Paths.get("downloaded_file.txt"));
Как организовать 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();
}
}
*Подробный разбор здесь.
Как использовать пользовательские ожидания (custom waits)?
Используйте page.waitForCondition():
page.waitForCondition(() -> page.evaluate("() => document.readyState").equals("complete") );
// Или для локатора:
page.locator(".spinner").waitFor(new Locator.WaitForOptions()
.setState(WaitForSelectorState.HIDDEN));
Как перехватывать сетевые запросы/ответы?
Подпишитесь на события request и response:
page.onRequest(request -> System.out.println(">> " + request.method() + " " + request.url()) );
page.onResponse(response -> System.out.println("<< " + response.status() + " " + response.url()) );
Как тестировать веб-сокеты (WebSockets)?
Дождитесь события websocket и взаимодействуйте:
WebSocket ws = page.waitForWebSocket(() -> page.click("#start-websocket-button") );
ws.sendText("ping"); ws.onMessage(message -> System.out.println("Received: " + message.text()) );
Как интегрировать Playwright с Allure Report?
Используйте JUnit 5/TestNG и адаптеры Allure. Добавьте аннотации и прикрепляйте артефакты:
@Test
@DisplayName("Проверка логина")
@Attachment(type = "image/png", value = "screenshot")
public byte[] testLogin() {
// ... код теста
return page.screenshot(); // Скриншот в отчет
}
Как использовать 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) );
Как тестировать Shadow DOM?
Используйте locator() с селектором, проникающим в Shadow Root:
Locator shadowButton = page.locator("my-component::shadow(button#inner-button)");
shadowButton.click();
Как работать с базой данных в тестах?
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'");
}
Как генерировать случайные тестовые данные?
Используйте библиотеки (Faker):
Faker faker = new Faker();
String email = faker.internet()
.emailAddress();
page.locator("#email")
.fill(email);
Полезные ресурсы
Полный курс обучения: Автоматизация тестирования с Playwright на Java
Что вас ждет на курсе:
Надеемся, что этот гайд поможет вам самостоятельно и успешно внедрить Playwright в ваших проектах, и достичь новых высот в автоматизации тестирования.
Смотрите также подробный видео разбор Playwright: Полное Руководство по Автоматизации Тестирования [От Новичка до Эксперта]
👋👋👋