Перейти к основному содержимому

Release Notes

Версия 1.51

Основные моменты

  • Новая опция setIndexedDB для BrowserContext.storageState() позволяет сохранять и восстанавливать содержимое IndexedDB. Полезно, когда ваше приложение использует IndexedDB API для хранения токенов аутентификации, таких как Firebase Authentication.

    Вот пример, следующий руководству по аутентификации:

    // Сохраните состояние хранилища в файл. Убедитесь, что IndexedDB включен.
    context.storageState(new BrowserContext.StorageStateOptions()
    .setPath(Paths.get("state.json"))
    .setIndexedDB(true));

    // Создайте новый контекст с сохраненным состоянием хранилища.
    BrowserContext context = browser.newContext(new Browser.NewContextOptions()
    .setStorageStatePath(Paths.get("state.json")));
  • Новая опция setVisible для Locator.filter() позволяет сопоставлять только видимые элементы.

    // Игнорировать невидимые элементы списка дел.
    Locator todoItems = page.getByTestId("todo-item")
    .filter(new Locator.FilterOptions().setVisible(true));
    // Убедитесь, что их ровно 3 видимых.
    assertThat(todoItems).hasCount(3);
  • Новая опция setContrast для методов Page.emulateMedia() и Browser.newContext() позволяет эмулировать медиа-функцию prefers-contrast.

  • Новая опция setFailOnStatusCode заставляет все запросы fetch, выполненные через APIRequestContext, выбрасывать исключение при кодах ответа, отличных от 2xx и 3xx.

Версии браузеров

  • Chromium 134.0.6998.35
  • Mozilla Firefox 135.0
  • WebKit 18.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 133
  • Microsoft Edge 133

Версия 1.50

Разное

Обновления интерфейса

  • Новая кнопка в Codegen для выбора элементов для создания снимков aria.
  • Дополнительные детали (например, нажатые клавиши) теперь отображаются вместе с вызовами API действий в трассах.
  • Отображение содержимого canvas в трассах является ошибочным. Отображение теперь отключено по умолчанию и может быть включено через настройку интерфейса Display canvas content.
  • Панели Call и Network теперь отображают дополнительную информацию о времени.

Изменения

  • assertThat(locator).isEditable() и Locator.isEditable() теперь выбрасывают исключение, если целевой элемент не является <input>, <select> или другим редактируемым элементом.

Версии браузеров

  • Chromium 133.0.6943.16
  • Mozilla Firefox 134.0
  • WebKit 18.2

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 132
  • Microsoft Edge 132

Версия 1.49

Снимки Aria

Новое утверждение assertThat(locator).matchesAriaSnapshot() проверяет структуру страницы, сравнивая с ожидаемым деревом доступности, представленным в формате YAML.

page.navigate("https://playwright.dev");
assertThat(page.locator("body")).matchesAriaSnapshot("""
- banner:
- heading /Playwright enables reliable/ [level=1]
- link "Get started"
- link "Star microsoft/playwright on GitHub"
- main:
- img "Browsers (Chromium, Firefox, WebKit)"
- heading "Any browser • Any platform • One API"
""");

Вы можете сгенерировать это утверждение с помощью Test Generator или вызвав Locator.ariaSnapshot().

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

Группы трассировки

Новый метод Tracing.group() позволяет визуально группировать действия в просмотрщике трасс.

// Все действия между group и groupEnd
// будут показаны в просмотрщике трасс как группа.
page.context().tracing().group("Open Playwright.dev > API");
page.navigate("https://playwright.dev/");
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("API")).click();
page.context().tracing().groupEnd();

Изменения: каналы chrome и msedge переключаются на новый режим без головы

Это изменение затрагивает вас, если вы используете один из следующих каналов в вашем playwright.config.ts:

  • chrome, chrome-dev, chrome-beta или chrome-canary
  • msedge, msedge-dev, msedge-beta или msedge-canary

После обновления до Playwright v1.49 запустите ваш тестовый набор. Если он все еще проходит, вы в порядке. Если нет, вам, вероятно, потребуется обновить ваши снимки и адаптировать часть вашего тестового кода вокруг просмотрщиков PDF и расширений. См. вопрос #33566 для получения более подробной информации.

Попробуйте новый режим без головы в Chromium

Вы можете включить новый режим без головы, используя канал 'chromium'. Как говорится в официальной документации Chrome:

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

См. вопрос #33566 для списка возможных нарушений, с которыми вы можете столкнуться, и более подробной информации о Chromium headless. Пожалуйста, создайте вопрос, если вы заметите какие-либо проблемы после включения.

Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setChannel("chromium"));

Разное

  • Больше не будет обновлений для WebKit на Ubuntu 20.04 и Debian 11. Мы рекомендуем обновить вашу ОС до более поздней версии.
  • Элементы <canvas> внутри снимка теперь отображают предварительный просмотр.

Версии браузеров

  • Chromium 131.0.6778.33
  • Mozilla Firefox 132.0
  • WebKit 18.2

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 130
  • Microsoft Edge 130

Версия 1.48

Маршрутизация WebSocket

Новые методы Page.routeWebSocket() и BrowserContext.routeWebSocket() позволяют перехватывать, изменять и имитировать соединения WebSocket, инициированные на странице. Ниже приведен простой пример, который имитирует общение по WebSocket, отвечая на "request" с "response".

page.routeWebSocket("/ws", ws -> {
ws.onMessage(frame -> {
if ("request".equals(frame.text()))
ws.send("response");
});
});

См. WebSocketRoute для получения более подробной информации.

Обновления интерфейса

  • Новые кнопки "копировать" для аннотаций и местоположения теста в HTML-отчете.
  • Вызовы методов маршрутизации, таких как Route.fulfill(), больше не отображаются в отчете и просмотрщике трасс. Вы можете увидеть, какие сетевые запросы были маршрутизированы, на вкладке сети.
  • Новые кнопки "Копировать как cURL" и "Копировать как fetch" для запросов на вкладке сети.

Разное

  • Новый метод Page.requestGC() может помочь обнаружить утечки памяти.
  • Запросы, выполненные APIRequestContext, теперь записывают подробную информацию о времени и безопасности в HAR.

Версии браузеров

  • Chromium 130.0.6723.19
  • Mozilla Firefox 130.0
  • WebKit 18.0

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 129
  • Microsoft Edge 129

Версия 1.47

Улучшения вкладки сети

Вкладка сети в просмотрщике трасс получила несколько приятных улучшений:

  • фильтрация по типу ресурса и URL
  • лучшее отображение параметров строки запроса
  • предварительный просмотр шрифтовых ресурсов

Вкладка сети теперь имеет фильтры

Разное

  • mcr.microsoft.com/playwright/java:v1.47.0 теперь предоставляет образ Playwright на основе Ubuntu 24.04 Noble. Чтобы использовать образ на основе 22.02 jammy, используйте mcr.microsoft.com/playwright/java:v1.47.0-jammy.
  • Теги :latest/:focal/:jammy для образов Playwright Docker больше не публикуются. Закрепите на конкретной версии для лучшей стабильности и воспроизводимости.
  • Клиентские сертификаты TLS теперь могут передаваться из памяти, передавая setClientCertificates.setCert и setClientCertificates.setKey в виде массивов байтов вместо путей к файлам.
  • setNoWaitAfter в Locator.selectOption() был устаревшим.
  • Мы видели сообщения о неправильной работе WebGL в Webkit на GitHub Actions macos-13. Мы рекомендуем обновить GitHub Actions до macos-14.

Версии браузеров

  • Chromium 129.0.6668.29
  • Mozilla Firefox 130.0
  • WebKit 18.0

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 128
  • Microsoft Edge 128

Версия 1.46

Клиентские сертификаты TLS

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

Вы можете предоставить клиентские сертификаты в качестве параметра Browser.newContext() и APIRequest.newContext(). Следующий фрагмент кода настраивает клиентский сертификат для https://example.com:

BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setClientCertificates(asList(new ClientCertificate("https://example.com")
.setCertPath(Paths.get("client-certificates/cert.pem"))
.setKeyPath(Paths.get("client-certificates/key.pem")))));

Обновления просмотрщика трасс

  • Содержимое текстовых вложений теперь отображается в строку в панели вложений.
  • Новая настройка для отображения/скрытия действий маршрутизации, таких как Route.resume().
  • Метод запроса и статус отображаются на вкладке сведений о сети.
  • Новая кнопка для копирования местоположения исходного файла в буфер обмена.
  • Панель метаданных теперь отображает baseURL.

Разное

  • Новая опция maxRetries в APIRequestContext.fetch(), которая повторяет попытки при сетевой ошибке ECONNRESET.

Версии браузеров

  • Chromium 128.0.6613.18
  • Mozilla Firefox 128.0
  • WebKit 18.0

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 127
  • Microsoft Edge 127

Версия 1.45

Часы

Использование нового API Clock позволяет манипулировать и контролировать время в тестах для проверки поведения, связанного со временем. Этот API охватывает многие распространенные сценарии, включая:

  • тестирование с предопределенным временем;
  • поддержание согласованного времени и таймеров;
  • мониторинг бездействия;
  • ручное продвижение времени.
// Инициализируйте часы с некоторым временем до тестового времени и дайте странице загрузиться
// естественным образом. `Date.now` будет прогрессировать по мере срабатывания таймеров.
page.clock().install(new Clock.InstallOptions().setTime("2024-02-02T08:00:00"));
page.navigate("http://localhost:3333");
Locator locator = page.getByTestId("current-time");

// Предположим, что пользователь закрыл крышку ноутбука и снова открыл ее в 10 утра.
// Приостановите время, как только оно достигнет этой точки.
page.clock().pauseAt("2024-02-02T10:00:00");

// Утвердите состояние страницы.
assertThat(locator).hasText("2/2/2024, 10:00:00 AM");

// Снова закройте крышку ноутбука и откройте ее в 10:30 утра.
page.clock().fastForward("30:00");
assertThat(locator).hasText("2/2/2024, 10:30:00 AM");

См. руководство по часам для получения более подробной информации.

Разное

  • Метод Locator.setInputFiles() теперь поддерживает загрузку каталога для элементов <input type=file webkitdirectory>.

    page.getByLabel("Upload directory").setInputFiles(Paths.get("mydir"));
  • Несколько методов, таких как Locator.click() или Locator.press(), теперь поддерживают модификатор клавиши ControlOrMeta. Эта клавиша сопоставляется с Meta на macOS и сопоставляется с Control на Windows и Linux.

    // Нажмите общую комбинацию клавиш Control+S или Meta+S, чтобы вызвать операцию "Сохранить".
    page.keyboard.press("ControlOrMeta+S");
  • Новое свойство httpCredentials.send в APIRequest.newContext(), которое позволяет либо всегда отправлять заголовок Authorization, либо отправлять его только в ответ на 401 Unauthorized.

  • Playwright теперь поддерживает Chromium, Firefox и WebKit на Ubuntu 24.04.

  • v1.45 - это последний выпуск, который получит обновление WebKit для macOS 12 Monterey. Пожалуйста, обновите macOS, чтобы продолжать использовать последний WebKit.

Версии браузеров

  • Chromium 127.0.6533.5
  • Mozilla Firefox 127.0
  • WebKit 17.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 126
  • Microsoft Edge 126

Версия 1.44

Новые API

Проверки доступности

  • assertThat(locator).hasAccessibleName() проверяет, имеет ли элемент указанное доступное имя:

    Locator locator = page.getByRole(AriaRole.BUTTON);
    assertThat(locator).hasAccessibleName("Submit");
  • assertThat(locator).hasAccessibleDescription() проверяет, имеет ли элемент указанное доступное описание:

    Locator locator = page.getByRole(AriaRole.BUTTON);
    assertThat(locator).hasAccessibleDescription("Upload a photo");
  • assertThat(locator).hasRole() проверяет, имеет ли элемент указанную роль ARIA:

    Locator locator = page.getByTestId("save-button");
    assertThat(locator).hasRole(AriaRole.BUTTON);

Обработчик локаторов

  • После выполнения обработчика, добавленного с помощью Page.addLocatorHandler(), Playwright теперь будет ждать, пока оверлей, вызвавший обработчик, не станет невидимым. Вы можете отказаться от этого поведения с помощью новой опции setNoWaitAfter.
  • Вы можете использовать новую опцию setTimes в Page.addLocatorHandler(), чтобы указать максимальное количество раз, которое обработчик должен быть выполнен.
  • Обработчик в Page.addLocatorHandler() теперь принимает локатор в качестве аргумента.
  • Новый метод Page.removeLocatorHandler() для удаления ранее добавленных обработчиков локаторов.
Locator locator = page.getByText("This interstitial covers the button");
page.addLocatorHandler(locator, overlay -> {
overlay.locator("#close").click();
}, new Page.AddLocatorHandlerOptions().setTimes(3).setNoWaitAfter(true));
// Запустите ваши тесты, которые могут быть прерваны оверлеем.
// ...
page.removeLocatorHandler(locator);

Разные опции

  • Новый метод FormData.append() позволяет указывать повторяющиеся поля с одинаковым именем в опции setMultipart в RequestOptions:

    FormData formData = FormData.create();
    formData.append("file", new FilePayload("f1.js", "text/javascript",
    "var x = 2024;".getBytes(StandardCharsets.UTF_8)));
    formData.append("file", new FilePayload("f2.txt", "text/plain",
    "hello".getBytes(StandardCharsets.UTF_8)));
    APIResponse response = context.request().post("https://example.com/uploadFile", RequestOptions.create().setMultipart(formData));
  • expect(page).toHaveURL(url) теперь поддерживает опцию setIgnoreCase option.

Версии браузеров

  • Chromium 125.0.6422.14
  • Mozilla Firefox 125.0.1
  • WebKit 17.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 124
  • Microsoft Edge 124

Версия 1.43

Новые API

  • Метод BrowserContext.clearCookies() теперь поддерживает фильтры для удаления только некоторых файлов cookie.

    // Очистить все файлы cookie.
    context.clearCookies();
    // Новое: очистить файлы cookie с определенным именем.
    context.clearCookies(new BrowserContext.ClearCookiesOptions().setName("session-id"));
    // Новое: очистить файлы cookie для определенного домена.
    context.clearCookies(new BrowserContext.ClearCookiesOptions().setDomain("my-origin.com"));
  • Новый метод Locator.contentFrame() преобразует объект Locator в FrameLocator. Это может быть полезно, когда у вас есть объект Locator, полученный где-то, и позже вы хотите взаимодействовать с содержимым внутри фрейма.

    Locator locator = page.locator("iframe[name='embedded']");
    // ...
    FrameLocator frameLocator = locator.contentFrame();
    frameLocator.getByRole(AriaRole.BUTTON).click();
  • Новый метод FrameLocator.owner() преобразует объект FrameLocator в Locator. Это может быть полезно, когда у вас есть объект FrameLocator, полученный где-то, и позже вы хотите взаимодействовать с элементом iframe.

    FrameLocator frameLocator = page.frameLocator("iframe[name='embedded']");
    // ...
    Locator locator = frameLocator.owner();
    assertThat(locator).isVisible();

Версии браузеров

  • Chromium 124.0.6367.8
  • Mozilla Firefox 124.0
  • WebKit 17.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 123
  • Microsoft Edge 123

Версия 1.42

Экспериментальная интеграция с JUnit

Добавьте новую аннотацию @UsePlaywright к вашим тестовым классам, чтобы начать использовать фикстуры Playwright для Page, BrowserContext, Browser, APIRequestContext и Playwright в тестовых методах.

package org.example;

import com.microsoft.playwright.Page;
import com.microsoft.playwright.junit.UsePlaywright;
import org.junit.jupiter.api.Test;

import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;

@UsePlaywright
public class TestExample {
void shouldNavigateToInstallationGuide(Page page) {
page.navigate("https://playwright.dev/java/");
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Docs")).click();
assertThat(page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("Installation"))).isVisible();
}

@Test
void shouldCheckTheBox(Page page) {
page.setContent("<input id='checkbox' type='checkbox'></input>");
page.locator("input").check();
assertEquals(true, page.evaluate("window['checkbox'].checked"));
}

@Test
void shouldSearchWiki(Page page) {
page.navigate("https://www.wikipedia.org/");
page.locator("input[name=\"search\"]").click();
page.locator("input[name=\"search\"]").fill("playwright");
page.locator("input[name=\"search\"]").press("Enter");
assertThat(page).hasURL("https://en.wikipedia.org/wiki/Playwright");
}
}

В приведенном выше примере все три тестовых метода используют один и тот же Browser. Каждый тест использует свой собственный BrowserContext и Page.

Пользовательские опции

Реализуйте свой собственный OptionsFactory, чтобы инициализировать фикстуры с пользовательской конфигурацией.

import com.microsoft.playwright.junit.Options;
import com.microsoft.playwright.junit.OptionsFactory;
import com.microsoft.playwright.junit.UsePlaywright;

@UsePlaywright(MyTest.CustomOptions.class)
public class MyTest {

public static class CustomOptions implements OptionsFactory {
@Override
public Options getOptions() {
return new Options()
.setHeadless(false)
.setContextOption(new Browser.NewContextOptions()
.setBaseURL("https://github.com"))
.setApiRequestOptions(new APIRequest.NewContextOptions()
.setBaseURL("https://playwright.dev"));
}
}

@Test
public void testWithCustomOptions(Page page, APIRequestContext request) {
page.navigate("/");
assertThat(page).hasURL(Pattern.compile("github"));

APIResponse response = request.get("/");
assertTrue(response.text().contains("Playwright"));
}
}

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

Новый обработчик локаторов

Новый метод Page.addLocatorHandler() регистрирует обратный вызов, который будет вызван, когда указанный элемент станет видимым и может блокировать действия Playwright. Обратный вызов может избавиться от оверлея. Вот пример, который закрывает диалоговое окно с файлами cookie, когда оно появляется.

// Настройте обработчик.
page.addLocatorHandler(
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Hej! You are in control of your cookies.")),
() -> {
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Accept all")).click();
});
// Напишите тест как обычно.
page.navigate("https://www.ikea.com/");
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Collection of blue and white")).click();
assertThat(page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("Light and easy"))).isVisible();

Новые API

Объявления

  • ⚠️ Ubuntu 18 больше не поддерживается.

Версии браузеров

  • Chromium 123.0.6312.4
  • Mozilla Firefox 123.0
  • WebKit 17.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 122
  • Microsoft Edge 123

Версия 1.41

Новые API

Версии браузеров

  • Chromium 121.0.6167.57
  • Mozilla Firefox 121.0
  • WebKit 17.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 120
  • Microsoft Edge 120

Версия 1.40

Обновление генератора тестов

Генератор тестов Playwright

Новые инструменты для генерации утверждений:

Вот пример сгенерированного теста с утверждениями:

page.navigate("https://playwright.dev/");
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Get started")).click();
assertThat(page.getByLabel("Breadcrumbs").getByRole(AriaRole.LIST)).containsText("Installation");
assertThat(page.getByLabel("Search")).isVisible();
page.getByLabel("Search").click();
page.getByPlaceholder("Search docs").fill("locator");
assertThat(page.getByPlaceholder("Search docs")).hasValue("locator");

Новые API

Другие изменения

Версии браузеров

  • Chromium 120.0.6099.28
  • Mozilla Firefox 119.0
  • WebKit 17.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 119
  • Microsoft Edge 119

Version 1.39

Обновление evergreen-браузеров.

Версии браузеров

  • Chromium 119.0.6045.9
  • Mozilla Firefox 118.0.1
  • WebKit 17.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 118
  • Microsoft Edge 118

Version 1.38

Обновления Trace Viewer

Playwright Trace Viewer

  1. Увеличение временного диапазона.
  2. Переработка панели сети.

Новые API

Устаревшие функции

  • Следующие методы были устаревшими: Page.type(), Frame.type(), Locator.type() и ElementHandle.type(). Пожалуйста, используйте Locator.fill(), который работает намного быстрее. Используйте Locator.pressSequentially() только в случае, если на странице есть специальная обработка клавиатуры, и вам нужно нажимать клавиши по одной.

Версии браузеров

  • Chromium 117.0.5938.62
  • Mozilla Firefox 117.0
  • WebKit 17.0

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 116
  • Microsoft Edge 116

Version 1.37

Новые API

  • Новые методы BrowserContext.newCDPSession() и Browser.newBrowserCDPSession() создают сессию Chrome DevTools Protocol для страницы и браузера соответственно.

    CDPSession cdpSession = page.context().newCDPSession(page);
    cdpSession.send("Runtime.enable");

    JsonObject params = new JsonObject();
    params.addProperty("expression", "window.foo = 'bar'");
    cdpSession.send("Runtime.evaluate", params);

    Object foo = page.evaluate("window['foo']");
    assertEquals("bar", foo);

📚 Поддержка Debian 12 Bookworm

Playwright теперь поддерживает Debian 12 Bookworm на x86_64 и arm64 для Chromium, Firefox и WebKit. Сообщите нам, если у вас возникнут какие-либо проблемы!

Поддержка Linux выглядит следующим образом:

Ubuntu 20.04Ubuntu 22.04Debian 11Debian 12
Chromium
WebKit
Firefox

Версии браузеров

  • Chromium 116.0.5845.82
  • Mozilla Firefox 115.0
  • WebKit 17.0

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 115
  • Microsoft Edge 115

Version 1.36

🏝️ Летний выпуск по техническому обслуживанию.

Версии браузеров

  • Chromium 115.0.5790.75
  • Mozilla Firefox 115.0
  • WebKit 17.0

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 114
  • Microsoft Edge 114

Version 1.35

Основные моменты

  • Новая опция maskColor для методов Page.screenshot() и Locator.screenshot() для изменения цвета маски по умолчанию.

  • Новая команда CLI uninstall для удаления бинарных файлов браузера:

    $ mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="uninstall" # удалить браузеры, установленные этой установкой
    $ mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="uninstall --all" # удалить все когда-либо установленные браузеры Playwright

Версии браузеров

  • Chromium 115.0.5790.13
  • Mozilla Firefox 113.0
  • WebKit 16.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 114
  • Microsoft Edge 114

Version 1.34

Основные моменты

  • Новый Locator.and() для создания локатора, который соответствует обоим локаторам.

    Locator button = page.getByRole(AriaRole.BUTTON).and(page.getByTitle("Subscribe"));
  • Новые события BrowserContext.onConsoleMessage(handler) и BrowserContext.onDialog(handler) для подписки на любые диалоги и сообщения консоли с любой страницы из данного контекста браузера. Используйте новые методы ConsoleMessage.page() и Dialog.page() для определения источника события.

Версии браузеров

  • Chromium 114.0.5735.26
  • Mozilla Firefox 113.0
  • WebKit 16.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 113
  • Microsoft Edge 113

Version 1.33

Обновление локаторов

  • Используйте Locator.or() для создания локатора, который соответствует любому из двух локаторов. Рассмотрим сценарий, когда вы хотите нажать кнопку "Новое письмо", но иногда вместо этого появляется диалоговое окно настроек безопасности. В этом случае вы можете ждать либо кнопку "Новое письмо", либо диалог и действовать соответственно:

    Locator newEmail = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("New email"));
    Locator dialog = page.getByText("Confirm security settings");
    assertThat(newEmail.or(dialog)).isVisible();
    if (dialog.isVisible())
    page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Dismiss")).click();
    newEmail.click();
  • Используйте новые опции setHasNot и setHasNotText в Locator.filter() для поиска элементов, которые не соответствуют определенным условиям.

    Locator rowLocator = page.locator("tr");
    rowLocator
    .filter(new Locator.FilterOptions().setHasNotText("text in column 1"))
    .filter(new Locator.FilterOptions().setHasNot(
    page.getByRole(AriaRole.BUTTON,
    new Page.GetByRoleOptions().setName("column 2 button" ))))
    .screenshot();
  • Используйте новое утверждение web-first assertThat(locator).isAttached() для обеспечения того, что элемент присутствует в DOM страницы. Не путайте с assertThat(locator).isVisible(), которое гарантирует, что элемент как прикреплен, так и видим.

Новые API

Другие основные моменты

  • Нативная поддержка Apple Silicon - Playwright теперь работает без Rosetta
  • Добавлен образ Docker для Ubuntu 22.04 (Jammy)

⚠️ Изменение, нарушающее совместимость

  • mcr.microsoft.com/playwright/java:v1.33.0 теперь предоставляет образ Playwright на основе Ubuntu Jammy. Чтобы использовать образ на основе focal, используйте mcr.microsoft.com/playwright/java:v1.33.0-focal.

Версии браузеров

  • Chromium 113.0.5672.53
  • Mozilla Firefox 112.0
  • WebKit 16.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 112
  • Microsoft Edge 112

Version 1.32

Новые API

Версии браузеров

  • Chromium 112.0.5615.29
  • Mozilla Firefox 111.0
  • WebKit 16.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 111
  • Microsoft Edge 111

Version 1.31

Новые API

  • Новое утверждение assertThat(locator).isInViewport() гарантирует, что локатор указывает на элемент, который пересекает область просмотра, в соответствии с API наблюдателя пересечений.

    Locator locator = page.getByRole(AriaRole.BUTTON);

    // Убедитесь, что хотя бы часть элемента пересекает область просмотра.
    assertThat(locator).isInViewport();

    // Убедитесь, что элемент полностью вне области просмотра.
    assertThat(locator).not().isInViewport();

    // Убедитесь, что хотя бы половина элемента пересекает область просмотра.
    assertThat(locator).isInViewport(new LocatorAssertions.IsInViewportOptions().setRatio(0.5));

Разное

  • Снимки DOM в trace viewer теперь можно открывать в отдельном окне.
  • Новая опция setMaxRedirects для метода Route.fetch().
  • Playwright теперь поддерживает Debian 11 arm64.
  • Официальные образы Docker теперь включают Node 18 вместо Node 16.

Версии браузеров

  • Chromium 111.0.5563.19
  • Mozilla Firefox 109.0
  • WebKit 16.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 110
  • Microsoft Edge 110

Version 1.30

Версии браузеров

  • Chromium 110.0.5481.38
  • Mozilla Firefox 108.0.2
  • WebKit 16.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 109
  • Microsoft Edge 109

Version 1.29

Новые API

  • Новый метод Route.fetch():

    page.route("**/api/settings", route -> {
    // Получить оригинальные настройки.
    APIResponse response = route.fetch();
    // Принудительно установить тему настроек на предопределенное значение.
    String body = response.text().replace("\"theme\":\"default\"",
    "\"theme\":\"Solorized\"");
    // Выполнить с измененными данными.
    route.fulfill(new Route.FulfillOptions().setResponse(response).setBody(body));
    });
  • Новый метод Locator.all() для итерации по всем совпадающим элементам:

    // Отметить все флажки!
    Locator checkboxes = page.getByRole(AriaRole.CHECKBOX);
    for (Locator checkbox : checkboxes.all())
    checkbox.check();
  • Locator.selectOption() теперь соответствует по значению или метке:

    <select multiple>
    <option value="red">Red</option>
    <option value="green">Green</option>
    <option value="blue">Blue</option>
    </select>
    element.selectOption("Red");

Версии браузеров

  • Chromium 109.0.5414.46
  • Mozilla Firefox 107.0
  • WebKit 16.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 108
  • Microsoft Edge 108

Версия 1.28

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

  • Живые локаторы в CodeGen. Генерируйте локатор для любого элемента на странице с помощью инструмента "Explore".

Locator Explorer

Новые API

Версии браузеров

  • Chromium 108.0.5359.29
  • Mozilla Firefox 106.0
  • WebKit 16.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 107
  • Microsoft Edge 107

Версия 1.27

Локаторы

С этими новыми API писать локаторы - одно удовольствие:

page.getByLabel("User Name").fill("John");

page.getByLabel("Password").fill("secret-password");

page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign in")).click();

assertThat(page.getByText("Welcome, John!")).isVisible();

Все те же методы также доступны в классах Locator, FrameLocator и Frame.

Другие важные изменения

  • Как было объявлено в версии 1.25, Ubuntu 18 не будет поддерживаться с декабря 2022 года. Кроме того, обновления WebKit для Ubuntu 18 не будут доступны начиная со следующего выпуска Playwright.

Изменения в поведении

  • assertThat(locator).hasAttribute() с пустым значением больше не соответствует отсутствующему атрибуту. Например, следующий фрагмент будет успешным, когда у button нет атрибута disabled.

    assertThat(page.getByRole(AriaRole.BUTTON)).hasAttribute("disabled", "");

Версии браузеров

  • Chromium 107.0.5304.18
  • Mozilla Firefox 105.0.1
  • WebKit 16.0

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 106
  • Microsoft Edge 106

Версия 1.26

Утверждения

Другие важные изменения

  • Новая опция setMaxRedirects для APIRequestContext.get() и других для ограничения количества перенаправлений.
  • Docker-образы теперь используют OpenJDK 17.

Изменение поведения

Множество API Playwright уже поддерживают опцию setWaitUntil(WaitUntilState.DOMCONTENTLOADED). Например:

page.navigate("https://playwright.dev", new Page.NavigateOptions().setWaitUntil(WaitUntilState.DOMCONTENTLOADED));

До версии 1.26 это ожидало, пока все фреймы не вызовут событие DOMContentLoaded.

Чтобы соответствовать веб-спецификации, значение WaitUntilState.DOMCONTENTLOADED теперь ожидает, пока целевой фрейм не вызовет событие 'DOMContentLoaded'. Используйте setWaitUntil(WaitUntilState.LOAD), чтобы дождаться всех фреймов.

Версии браузеров

  • Chromium 106.0.5249.30
  • Mozilla Firefox 104.0
  • WebKit 16.0

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 105
  • Microsoft Edge 105

Версия 1.25

Новые API и изменения

  • Тайм-аут утверждений по умолчанию теперь можно изменить с помощью setDefaultAssertionTimeout.

Объявления

  • 🪦 Это последний выпуск с поддержкой macOS 10.15 (устарела с версии 1.21).
  • ⚠️ Ubuntu 18 теперь устарела и не будет поддерживаться с декабря 2022 года.

Версии браузеров

  • Chromium 105.0.5195.19
  • Mozilla Firefox 103.0
  • WebKit 16.0

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 104
  • Microsoft Edge 104

Версия 1.24

🐂 Поддержка Debian 11 Bullseye

Playwright теперь поддерживает Debian 11 Bullseye на x86_64 для Chromium, Firefox и WebKit. Сообщите нам, если у вас возникнут какие-либо проблемы!

Поддержка Linux выглядит следующим образом:

| | Ubuntu 20.04 | Ubuntu 22.04 | Debian 11 | :--- | :---: | :---: | :---: | :---: | | Chromium | ✅ | ✅ | ✅ | | WebKit | ✅ | ✅ | ✅ | | Firefox | ✅ | ✅ | ✅ |

Версия 1.23

Повторное воспроизведение сети

Теперь вы можете записывать сетевой трафик в файл HAR и повторно использовать этот трафик в ваших тестах.

Чтобы записать сеть в файл HAR:

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="open --save-har=example.har --save-har-glob='**/api/**' https://example.com"

Кроме того, вы можете записать HAR программно:

BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setRecordHarPath(Paths.get("example.har"))
.setRecordHarUrlFilter("**/api/**"));

// ... Выполните действия ...

// Закройте контекст, чтобы убедиться, что HAR сохранен на диск.
context.close();

Используйте новые методы Page.routeFromHAR() или BrowserContext.routeFromHAR(), чтобы обслуживать соответствующие ответы из файла HAR:

context.routeFromHAR(Paths.get("example.har"));

Подробнее читайте в нашей документации.

Расширенная маршрутизация

Теперь вы можете использовать Route.fallback() для передачи маршрутизации другим обработчикам.

Рассмотрим следующий пример:

// Удалите заголовок из всех запросов.
page.route("**/*", route -> {
Map<String, String> headers = new HashMap<>(route.request().headers());
headers.remove("X-Secret");
route.resume(new Route.ResumeOptions().setHeaders(headers));
});

// Прервать все изображения.
page.route("**/*", route -> {
if ("image".equals(route.request().resourceType()))
route.abort();
else
route.fallback();
});

Обратите внимание, что новые методы Page.routeFromHAR() и BrowserContext.routeFromHAR() также участвуют в маршрутизации и могут быть переданы.

Обновление веб-утверждений

Разное

  • Если вам мешает сервисный работник, теперь вы можете легко отключить его с помощью новой опции контекста serviceWorkers:

    BrowserContext context = browser.newContext(new Browser.NewContextOptions()
    .setServiceWorkers(ServiceWorkerPolicy.BLOCK));
  • Использование пути .zip для опции контекста recordHar автоматически архивирует полученный HAR:

    BrowserContext context = browser.newContext(new Browser.NewContextOptions()
    .setRecordHarPath(Paths.get("example.har.zip")));
  • Если вы собираетесь редактировать HAR вручную, рассмотрите возможность использования режима записи HAR "minimal", который записывает только информацию, необходимую для воспроизведения:

    BrowserContext context = browser.newContext(new Browser.NewContextOptions()
    .setRecordHarPath(Paths.get("example.har"))
    .setRecordHarMode(HarMode.MINIMAL));
  • Playwright теперь работает на Ubuntu 22 amd64 и Ubuntu 22 arm64.

Версия 1.22

Основные моменты

  • Селекторы ролей, которые позволяют выбирать элементы по их роли ARIA, атрибутам ARIA и доступному имени.

    // Нажмите кнопку с доступным именем "log in"
    page.locator("role=button[name='log in']").click();

    Подробнее читайте в нашей документации.

  • Новый API Locator.filter() для фильтрации существующего локатора

    Locator buttonsLocator = page.locator("role=button");
    // ...
    Locator submitButton = buttonsLocator.filter(new Locator.FilterOptions().setHasText("Submit"));
    submitButton.click();
  • Playwright для Java теперь поддерживает Ubuntu 20.04 ARM64 и Apple M1. Теперь вы можете запускать тесты Playwright для Java на Apple M1, внутри Docker на Apple M1 и на Raspberry Pi.

Версия 1.21

Основные моменты

Изменения в поведении

  • Playwright теперь поддерживает загрузку больших файлов (сотни МБ) через API Locator.setInputFiles().

Версии браузеров

  • Chromium 101.0.4951.26
  • Mozilla Firefox 98.0.2
  • WebKit 15.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 100
  • Microsoft Edge 100

Версия 1.20

Основные моменты

Объявления

  • Версия 1.20 - это последний выпуск, который получит обновление WebKit для macOS 10.15 Catalina. Пожалуйста, обновите macOS, чтобы продолжать использовать последние и лучшие версии WebKit!

Версии браузеров

  • Chromium 101.0.4921.0
  • Mozilla Firefox 97.0.1
  • WebKit 15.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 99
  • Microsoft Edge 99

Версия 1.19

Основные моменты

  • Локатор теперь поддерживает опцию has, которая гарантирует, что он содержит другой локатор внутри:

    page.locator("article", new Page.LocatorOptions().setHas(page.locator(".highlight"))).click();

    Подробнее читайте в документации по локаторам

  • Новый Locator.page()

  • Page.screenshot() и Locator.screenshot() теперь автоматически скрывают мигающий курсор

  • Playwright Codegen теперь генерирует локаторы и локаторы фреймов

Версии браузеров

  • Chromium 100.0.4863.0
  • Mozilla Firefox 96.0.1
  • WebKit 15.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 98
  • Microsoft Edge 98

Версия 1.18

Тестирование API

Playwright для Java 1.18 представляет новое тестирование API, которое позволяет отправлять запросы на сервер напрямую из Java! Теперь вы можете:

  • тестировать ваш серверный API
  • подготавливать состояние на стороне сервера перед посещением веб-приложения в тесте
  • проверять пост-условия на стороне сервера после выполнения некоторых действий в браузере

Чтобы сделать запрос от имени страницы Playwright, используйте новый API Page.request():

// Выполнить GET-запрос от имени страницы
APIResponse res = page.request().get("http://example.com/foo.json");

Подробнее об этом читайте в нашем руководстве по тестированию API.

Утверждения, ориентированные на веб

Playwright для Java 1.18 представляет утверждения, ориентированные на веб.

Рассмотрим следующий пример:

import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;

public class TestExample {
@Test
void statusBecomesSubmitted() {
// ...
page.locator("#submit-button").click();
assertThat(page.locator(".status")).hasText("Submitted");
}
}

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

Подробнее читайте в нашей документации.

Улучшения локаторов

  • Locator.dragTo()

  • Каждый локатор теперь может быть дополнительно отфильтрован по тексту, который он содержит:

    page.locator("li", new Page.LocatorOptions().setHasText("my item"))
    .locator("button").click();

    Подробнее читайте в документации по локаторам

Улучшения трассировки

Трассировка теперь может встраивать исходные коды Java в записанные трассы, используя новую опцию setSources.

tracing-java-sources

Новые API и изменения

  • Опция acceptDownloads теперь по умолчанию установлена в true.

Версии браузеров

  • Chromium 99.0.4812.0
  • Mozilla Firefox 95.0
  • WebKit 15.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 97
  • Microsoft Edge 97

Версия 1.17

Локаторы фреймов

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

Graphics

Локаторы фреймов могут быть созданы с помощью метода Page.frameLocator() или Locator.frameLocator().

Locator locator = page.frameLocator("#my-frame").locator("text=Submit");
locator.click();

Подробнее читайте в нашей документации.

Обновление Trace Viewer

Playwright Trace Viewer теперь доступен онлайн по адресу https://trace.playwright.dev! Просто перетащите ваш файл trace.zip, чтобы просмотреть его содержимое.

ПРИМЕЧАНИЕ: файлы трассировки не загружаются никуда; trace.playwright.dev - это прогрессивное веб-приложение, которое обрабатывает трассы локально.

  • Трассы Playwright Test теперь по умолчанию включают исходные коды (их можно отключить с помощью опции трассировки)
  • Trace Viewer теперь показывает имя теста
  • Новая вкладка метаданных трассы с деталями браузера
  • Снимки теперь имеют адресную строку

image

Обновление HTML отчета

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

image

Поддержка Ubuntu ARM64 и многое другое

  • Playwright теперь поддерживает Ubuntu 20.04 ARM64. Теперь вы можете запускать тесты Playwright внутри Docker на Apple M1 и Raspberry Pi.

  • Теперь вы можете использовать Playwright для установки стабильной версии Edge на Linux:

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

Новые API

  • Трассировка теперь поддерживает опцию 'title'
  • Навигация по страницам поддерживает новую опцию ожидания 'commit'

Версия 1.16

🎭 Библиотека Playwright

Locator.waitFor

Ожидание, пока локатор разрешится в один элемент с заданным состоянием. По умолчанию state: 'visible'.

Locator orderSent = page.locator("#order-sent");
orderSent.waitFor();

Подробнее о Locator.waitFor().

🎭 Playwright Trace Viewer

  • запустите просмотрщик трасс с помощью mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="show-trace" и перетащите файлы трасс в PWA просмотрщика трасс
  • лучшее визуальное отображение целей действий

Подробнее о Trace Viewer.

Версии браузеров

  • Chromium 97.0.4666.0
  • Mozilla Firefox 93.0
  • WebKit 15.4

Эта версия Playwright также была протестирована на следующих стабильных каналах:

  • Google Chrome 94
  • Microsoft Edge 94

Версия 1.15

🖱️ Колесо мыши

С помощью Mouse.wheel() теперь можно прокручивать вертикально или горизонтально.

📜 Новый API заголовков

Ранее было невозможно получить несколько значений заголовков ответа. Теперь это возможно, и доступны дополнительные вспомогательные функции:

🌈 Эмуляция принудительных цветов

Теперь можно эмулировать CSS-медиафункцию forced-colors, передавая ее в Browser.newContext() или вызывая Page.emulateMedia().

Новые API

  • Page.route() принимает новую опцию times, чтобы указать, сколько раз этот маршрут должен быть сопоставлен.
  • Page.setChecked() и Locator.setChecked() были введены для установки состояния флажка.
  • Request.sizes() Возвращает информацию о размере ресурса для данного HTTP-запроса.
  • Tracing.startChunk() - Начать новый фрагмент трассировки.
  • Tracing.stopChunk() - Остановить новый фрагмент трассировки.

Версии браузеров

  • Chromium 96.0.4641.0
  • Mozilla Firefox 92.0
  • WebKit 15.0

Версия 1.14

⚡️ Новый "строгий" режим

Неоднозначность селекторов - это распространенная проблема в автоматизированном тестировании. "Строгий" режим гарантирует, что ваш селектор указывает на один элемент и выбрасывает исключение в противном случае.

Установите setStrict(true) в ваших вызовах действий, чтобы включить его.

// Это выбросит исключение, если у вас больше одной кнопки!
page.click("button", new Page.ClickOptions().setStrict(true));

📍 Новый API локаторов

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

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

Кроме того, локаторы по умолчанию "строгие"!

Locator locator = page.locator("button");
locator.click();

Узнайте больше в документации.

🧩 Экспериментальные селекторные движки React и Vue

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

page.locator("_react=SubmitButton[enabled=true]").click();
page.locator("_vue=submit-button[enabled=true]").click();

Узнайте больше в документации по селекторам React и документации по селекторам Vue.

✨ Новые селекторные движки nth и visible

  • Селекторный движок nth эквивалентен псевдоклассу :nth-match, но может быть объединен с другими селекторными движками.
  • Селекторный движок visible эквивалентен псевдоклассу :visible, но может быть объединен с другими селекторными движками.
// выбрать первую кнопку среди всех кнопок
button.click("button >> nth=0");
// или если вы используете локаторы, вы можете использовать first(), nth() и last()
page.locator("button").first().click();

// нажать на видимую кнопку
button.click("button >> visible=true");

Версии браузеров

  • Chromium 94.0.4595.0
  • Mozilla Firefox 91.0
  • WebKit 15.0

Версия 1.13

Playwright

  • 🖖 Программная поддержка drag-and-drop через API Page.dragAndDrop().
  • 🔎 Улучшенный HAR с размерами тел для запросов и ответов. Используйте через опцию recordHar в Browser.newContext().

Инструменты

  • Playwright Trace Viewer теперь показывает параметры, возвращаемые значения и вызовы console.log().

Новые и переработанные руководства

Версии браузеров

  • Chromium 93.0.4576.0
  • Mozilla Firefox 90.0
  • WebKit 14.2

Новые API Playwright

Версия 1.12

🧟‍♂️ Представляем Playwright Trace Viewer

Playwright Trace Viewer — это новый инструмент с графическим интерфейсом, который помогает исследовать записанные трассы Playwright после выполнения скрипта. Трассы Playwright позволяют вам изучать:

  • DOM страницы до и после каждого действия Playwright
  • рендеринг страницы до и после каждого действия Playwright
  • сетевую активность браузера во время выполнения скрипта

Трассы записываются с использованием нового API BrowserContext.tracing():

Browser browser = playwright.chromium().launch();
BrowserContext context = browser.newContext();

// Начать запись трассы перед созданием/переходом на страницу.
context.tracing().start(new Tracing.StartOptions()
.setScreenshots(true)
.setSnapshots(true));

Page page = context.newPage();
page.navigate("https://playwright.dev");

// Остановить запись трассы и экспортировать её в zip-архив.
context.tracing().stop(new Tracing.StopOptions()
.setPath(Paths.get("trace.zip")));

Трассы исследуются позже с помощью Playwright CLI:

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="show-trace trace.zip"

Это откроет следующий графический интерфейс:

image

👉 Подробнее читайте в документации по trace viewer.

Версии браузеров

  • Chromium 93.0.4530.0
  • Mozilla Firefox 89.0
  • WebKit 14.2

Эта версия Playwright также была протестирована на следующих стабильных каналах:

  • Google Chrome 91
  • Microsoft Edge 91

Новые API

Версия 1.11

🎥 Новое видео: Playwright: A New Test Automation Framework for the Modern Web (презентация)

  • Мы говорили о Playwright
  • Показали инженерную работу за кулисами
  • Провели живые демонстрации с новыми функциями ✨
  • Особая благодарность applitools за проведение мероприятия и приглашение нас!

Версии браузеров

  • Chromium 92.0.4498.0
  • Mozilla Firefox 89.0b6
  • WebKit 14.2

Новые API

Версия 1.10

Встроенные версии браузеров

  • Chromium 90.0.4430.0
  • Mozilla Firefox 87.0b10
  • WebKit 14.2

Эта версия Playwright также была протестирована на следующих стабильных каналах:

  • Google Chrome 89
  • Microsoft Edge 89

Новые API

Версия 1.9

  • Playwright Inspector — это новый инструмент с графическим интерфейсом для создания и отладки ваших тестов.
    • Пошаговая отладка ваших скриптов Playwright с возможностью воспроизведения, паузы и пошагового выполнения.
    • Создание новых скриптов путем записи действий пользователя.
    • Генерация селекторов элементов для вашего скрипта путем наведения курсора на элементы.
    • Установите переменную окружения PWDEBUG=1, чтобы запустить Inspector
  • Приостановка выполнения скрипта с помощью Page.pause() в режиме с заголовком. Приостановка страницы запускает Playwright Inspector для отладки.
  • Новый псевдокласс has-text для CSS-селекторов. :has-text("example") соответствует любому элементу, содержащему "example" где-либо внутри, возможно, в дочернем или потомке элемента. Смотрите больше примеров.
  • Диалоги страницы теперь автоматически отклоняются во время выполнения, если не настроен слушатель для события dialog. Узнайте больше об этом.
  • Playwright for Python теперь стабильна с идиоматическим API в стиле snake case и предустановленным образом Docker для запуска тестов в CI/CD.

Версии браузеров

  • Chromium 90.0.4421.0
  • Mozilla Firefox 86.0b10
  • WebKit 14.1

Новые API

Версия 1.8

Новые API

Версии браузеров

  • Chromium 90.0.4392.0
  • Mozilla Firefox 85.0b5
  • WebKit 14.1

Версия 1.7

  • Новый Java SDK: Playwright for Java теперь наравне с JavaScript, Python и .NET bindings.
  • API хранения браузера: Новые удобные API для сохранения и загрузки состояния хранения браузера (куки, локальное хранилище) для упрощения сценариев автоматизации с аутентификацией.
  • Новые CSS-селекторы: Мы услышали ваши отзывы о более гибких селекторах и обновили реализацию селекторов. Playwright 1.7 представляет новые расширения CSS, и скоро будет больше.
  • Новый сайт: Документация на сайте playwright.dev обновлена и теперь построена с использованием Docusaurus.
  • Поддержка Apple Silicon: Бинарные файлы браузеров Playwright для WebKit и Chromium теперь собраны для Apple Silicon.

Новые API

Версии браузеров

  • Chromium 89.0.4344.0
  • Mozilla Firefox 84.0b9
  • WebKit 14.1