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
Разное
- Добавлен метод assertThat(locator).hasAccessibleErrorMessage() для утверждения, что Локатор указывает на элемент с заданным aria errormessage.
Обновления интерфейса
- Новая кнопка в 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
- Page.pdf() принимает две новые опции setTagged и setOutline.
Объявления
- ⚠️ Ubuntu 18 больше не поддерживается.
Версии браузеров
- Chromium 123.0.6312.4
- Mozilla Firefox 123.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 122
- Microsoft Edge 123
Версия 1.41
Новые API
- Новый метод Page.unrouteAll() удаляет все маршруты, зарегистрированные с помощью Page.route() и Page.routeFromHAR().
- Новый метод BrowserContext.unrouteAll() удаляет все маршруты, зарегистрированные с помощью BrowserContext.route() и BrowserContext.routeFromHAR().
- Новые опции setStyle в Page.screenshot() и setStyle в Locator.screenshot() для добавления пользовательского CSS на страницу перед созданием скриншота.
Версии браузеров
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 120
- Microsoft Edge 120
Версия 1.40
Обновление генератора тестов
Новые инструменты для генерации утверждений:
- Инструмент "Assert visibility" генерирует assertThat(locator).isVisible().
- Инструмент "Assert value" генерирует assertThat(locator).hasValue().
- Инструмент "Assert text" генерирует assertThat(locator).containsText().
Вот пример сгенерированного теста с утверждениями:
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
- Опции setReason в Page.close(), setReason в BrowserContext.close() и setReason в Browser.close(). Причина закрытия сообщается для всех операций, прерванных закрытием.
- Опция setFirefoxUserPrefs в BrowserType.launchPersistentContext().
Другие изменения
- Методы Download.path() и Download.createReadStream() выдают ошибку для неудачных и отмененных загрузок.
Версии браузеров
- 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
- Увеличение временного диапазона.
- Переработка панели сети.
Новые 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.04 | Ubuntu 22.04 | Debian 11 | Debian 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
- Locator.or()
- Новая опция setHasNot в Locator.filter()
- Новая опция setHasNotText в Locator.filter()
- assertThat(locator).isAttached()
- Новая опция setTimeout в Route.fetch()
Другие основные моменты
- Нативная поддержка 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
- Новые опции setUpdateMode и setUpdateContent в Page.routeFromHAR() и BrowserContext.routeFromHAR().
- Цепочка существующих объектов локаторов, см. документацию по локаторам для подробностей.
- Новая опция setName в методе Tracing.startChunk().
Версии браузеров
- 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".
Новые API
Версии браузеров
- Chromium 108.0.5359.29
- Mozilla Firefox 106.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 107
- Microsoft Edge 107
Версия 1.27
Локаторы
С этими новыми API писать локаторы - одно удовольствие:
- Page.getByText() для поиска по текстовому содержимому.
- Page.getByRole() для поиска по роли ARIA, атрибутам ARIA и доступному имени.
- Page.getByLabel() для поиска элемента управления формой по тексту связанной метки.
- Page.getByTestId() для поиска элемента на основе его атрибута
data-testid
(можно настроить другой атрибут). - Page.getByPlaceholder() для поиска ввода по заполнителю.
- Page.getByAltText() для поиска элемента, обычно изображения, по его текстовой альтернативе.
- Page.getByTitle() для поиска элемента по его заголовку.
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
Утверждения
- Новая опция
enabled
для assertThat(locator).isEnabled(). - assertThat(locator).hasText() теперь проникает в открытые теневые корни.
- Новая опция
editable
для assertThat(locator).isEditable(). - Новая опция
visible
для assertThat(locator).isVisible().
Другие важные изменения
- Новая опция
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() также участвуют в маршрутизации и могут быть переданы.
Обновление веб-утверждений
- Новый метод assertThat(locator).hasValues(), который утверждает все выбранные значения элемента
<select multiple>
. - Методы assertThat(locator).containsText() и assertThat(locator).hasText() теперь принимают опцию
ignoreCase
.
Разное
-
Если вам мешает сервисный работник, теперь вы можете легко отключить его с помощью новой опции контекста
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
Основные моменты
-
Новые селекторы ролей, которые позволяют выбирать элементы по их роли ARIA, атрибутам ARIA и доступному имени.
// Нажмите кнопку с доступным именем "log in"
page.locator("role=button[name='log in']").click();Подробнее читайте в нашей документации.
-
Новая опция
scale
в Page.screenshot() для уменьшения размера скриншотов. -
Новая опция
caret
в Page.screenshot() для управления текстовым курсором. По умолчанию"hide"
.
Изменения в поведении
- 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
Основные моменты
- Новые опции для методов Page.screenshot(), Locator.screenshot() и ElementHandle.screenshot():
- Опция
ScreenshotAnimations.DISABLED
перематывает все CSS-анимации и переходы в согласованное состояние - Опция
mask: Locator[]
маскирует указанные элементы, накладывая на них розовые блоки#FF00FF
.
- Опция
- Trace Viewer теперь показывает запросы тестирования API.
- Locator.highlight() визуально выделяет элемент(ы) для упрощения отладки.
Объявления
- Версия 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"
. Он будет повторно извлекать узел и проверять его снова и снова, пока условие не будет выполнено или не истечет время ожидания. Вы можете передать это время ожидания в качестве опции.
Подробнее читайте в нашей документации.
Улучшения локаторов
-
Каждый локатор теперь может быть дополнительно отфильтрован по тексту, который он содержит:
page.locator("li", new Page.LocatorOptions().setHasText("my item"))
.locator("button").click();Подробнее читайте в документации по локаторам
Улучшения трассировки
Трассировка теперь может встраивать исходные коды Java в записанные трассы, используя новую опцию setSources
.
Новые 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
и могут использоваться в утверждениях, ориентированных на веб.
Локаторы фреймов могут быть созданы с помощью метода 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 теперь показывает имя теста
- Новая вкладка метаданных трассы с деталями браузера
- Снимки теперь имеют адресную строку
Обновление HTML отчета
- HTML отчет теперь поддерживает динамическую фильтрацию
- Отчет теперь представляет собой один статический HTML файл, который можно отправить по электронной почте или в виде вложения в Slack.
Поддержка 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 заголовков
Ранее было невозможно получить несколько значений заголовков ответа. Теперь это возможно, и доступны дополнительные вспомогательные функции:
- Request.allHeaders()
- Request.headersArray()
- Request.headerValue()
- Response.allHeaders()
- Response.headersArray()
- Response.headerValue()
- Response.headerValues()
🌈 Эмуляция принудительных цветов
Теперь можно эмулировать 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
- новая опция
baseURL
в Browser.newContext() и Browser.newPage() - Response.securityDetails() и Response.serverAddr()
- Page.dragAndDrop() и Frame.dragAndDrop()
- Download.cancel()
- Page.inputValue(), Frame.inputValue() и ElementHandle.inputValue()
- новая опция
force
в Page.fill(), Frame.fill(), и ElementHandle.fill() - новая опция
force
в Page.selectOption(), Frame.selectOption(), и ElementHandle.selectOption()
Версия 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"
Это откроет следующий графический интерфейс:
👉 Подробнее читайте в документации по trace viewer.
Версии браузеров
- Chromium 93.0.4530.0
- Mozilla Firefox 89.0
- WebKit 14.2
Эта версия Playwright также была протестирована на следующих стабильных каналах:
- Google Chrome 91
- Microsoft Edge 91
Новые API
- опция
reducedMotion
в Page.emulateMedia(), BrowserType.launchPersistentContext(), Browser.newContext() и Browser.newPage() - BrowserContext.onRequest(handler)
- BrowserContext.onRequestFailed(handler)
- BrowserContext.onRequestFinished(handler)
- BrowserContext.onResponse(handler)
- опция
tracesDir
в BrowserType.launch() и BrowserType.launchPersistentContext() - новый API namespace BrowserContext.tracing()
- новый метод Download.page()
Версия 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
- поддержка асинхронных предикатов в методах, таких как Page.waitForRequest() и других
- новые устройства эмуляции: Galaxy S8, Galaxy S9+, Galaxy Tab S4, Pixel 3, Pixel 4
- новые методы:
- Page.waitForURL() для ожидания переходов на URL
- Video.delete() и Video.saveAs() для управления записью экрана
- новые опции:
- опция
screen
в методе Browser.newContext() для эмуляции размеровwindow.screen
- опция
position
в методах Page.check() и Page.uncheck() - опция
trial
для пробного выполнения действий в Page.check(), Page.uncheck(), Page.click(), Page.dblclick(), Page.hover() и Page.tap()
- опция
Версия 1.10
- Playwright for Java v1.10 теперь стабильна!
- Запускайте Playwright на Google Chrome и Microsoft Edge стабильных каналах с новым API каналов.
- Скриншоты Chromium быстрые на Mac и Windows.
Встроенные версии браузеров
- Chromium 90.0.4430.0
- Mozilla Firefox 87.0b10
- WebKit 14.2
Эта версия Playwright также была протестирована на следующих стабильных каналах:
- Google Chrome 89
- Microsoft Edge 89
Новые API
- BrowserType.launch() теперь принимает новую опцию
'channel'
. Подробнее читайте в нашей документации.
Версия 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
-
Выбор элементов на основе расположения с помощью
:left-of()
,:right-of()
,:above()
и:below()
. -
Playwright теперь включает интерфейс командной строки, бывший playwright-cli.
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="--help"
-
Page.selectOption() теперь ожидает, пока опции будут доступны.
-
Новые методы для проверки состояния элемента, такие как Page.isEditable().
Новые API
- ElementHandle.isChecked().
- ElementHandle.isDisabled().
- ElementHandle.isEditable().
- ElementHandle.isEnabled().
- ElementHandle.isHidden().
- ElementHandle.isVisible().
- Page.isChecked().
- Page.isDisabled().
- Page.isEditable().
- Page.isEnabled().
- Page.isHidden().
- Page.isVisible().
- Новая опция
'editable'
в ElementHandle.waitForElementState().
Версии браузеров
- 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
- BrowserContext.storageState() для получения текущего состояния для последующего использования.
- опция
storageState
в Browser.newContext() и Browser.newPage() для настройки состояния контекста браузера.
Версии браузеров
- Chromium 89.0.4344.0
- Mozilla Firefox 84.0b9
- WebKit 14.1