Release Notes
Версия 1.51
Основные моменты
-
Новая опция IndexedDB для BrowserContext.StorageStateAsync() позволяет сохранять и восстанавливать содержимое IndexedDB. Полезно, когда ваше приложение использует IndexedDB API для хранения токенов аутентификации, таких как Firebase Authentication.
Вот пример, следующий руководству по аутентификации:
// Сохраните состояние хранилища в файл. Убедитесь, что IndexedDB включен.
await context.StorageStateAsync(new()
{
Path = "../../../playwright/.auth/state.json",
IndexedDB = true
});
// Создайте новый контекст с сохраненным состоянием хранилища.
var context = await browser.NewContextAsync(new()
{
StorageStatePath = "../../../playwright/.auth/state.json"
}); -
Новая опция Visible для Locator.Filter() позволяет выбирать только видимые элементы.
// Игнорировать невидимые элементы списка дел.
var todoItems = Page.GetByTestId("todo-item").Filter(new() { Visible = true });
// Убедитесь, что их ровно 3 видимых.
await Expect(todoItems).ToHaveCountAsync(3); -
Новая опция
Contrast
для методов Page.EmulateMediaAsync() и Browser.NewContextAsync() позволяет эмулировать медиа-функциюprefers-contrast
. -
Новая опция FailOnStatusCode заставляет все запросы, выполненные через APIRequestContext, выбрасывать исключение при кодах ответа, отличных от 2xx и 3xx.
Версии браузеров
- Chromium 134.0.6998.35
- Mozilla Firefox 135.0
- WebKit 18.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 133
- Microsoft Edge 133
Версия 1.50
Поддержка Xunit
- Поддержка xUnit 2.8+ через Microsoft.Playwright.Xunit. Следуйте нашему руководству по началу работы, чтобы узнать больше.
Разное
- Добавлен метод Expect(Locator).ToHaveAccessibleErrorMessageAsync() для проверки, что Locator указывает на элемент с заданным aria errormessage.
Обновления интерфейса
- Новая кнопка в Codegen для выбора элементов для создания снимков aria.
- Дополнительные детали (например, нажатые клавиши) теперь отображаются вместе с вызовами API действий в трассах.
- Отображение содержимого
canvas
в трассах является ошибочным. Отображение теперь отключено по умолчанию и может быть включено через настройку интерфейсаDisplay canvas content
. - Панели
Call
иNetwork
теперь отображают дополнительную информацию о времени.
Изменения
- Expect(Locator).ToBeEditableAsync() и Locator.IsEditableAsync() теперь выбрасывают исключение, если целевой элемент не является
<input>
,<select>
или другим редактируемым элементом.
Версии браузеров
- Chromium 133.0.6943.16
- Mozilla Firefox 134.0
- WebKit 18.2
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 132
- Microsoft Edge 132
Версия 1.49
Снимки Aria
Новая проверка Expect(Locator).ToMatchAriaSnapshotAsync() проверяет структуру страницы, сравнивая с ожидаемым деревом доступности, представленным в формате YAML.
await page.GotoAsync("https://playwright.dev");
await Expect(page.Locator("body")).ToMatchAriaSnapshotAsync(@"
- 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""
");
Вы можете сгенерировать эту проверку с помощью Генератора тестов или вызвав Locator.AriaSnapshotAsync().
Узнайте больше в руководстве по снимкам aria.
Группы трассировки
Новый метод Tracing.GroupAsync() позволяет визуально группировать действия в просмотрщике трассировки.
// Все действия между GroupAsync и GroupEndAsync
// будут показаны в просмотрщике трассировки как группа.
await Page.Context.Tracing.GroupAsync("Open Playwright.dev > API");
await Page.GotoAsync("https://playwright.dev/");
await Page.GetByRole(AriaRole.Link, new() { Name = "API" }).ClickAsync();
await Page.Context.Tracing.GroupEndAsync();
Изменения: каналы 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. Пожалуйста, создайте вопрос, если вы заметите какие-либо проблемы после включения.
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<Playwright>
<BrowserName>chromium</BrowserName>
<LaunchOptions>
<Channel>chromium</Channel>
</LaunchOptions>
</Playwright>
</RunSettings>
dotnet test -- Playwright.BrowserName=chromium Playwright.LaunchOptions.Channel=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.RouteWebSocketAsync() и BrowserContext.RouteWebSocketAsync() позволяют перехватывать, изменять и имитировать соединения WebSocket, инициированные на странице. Ниже приведен простой пример, который имитирует общение по WebSocket, отвечая на "request"
с "response"
.
await page.RouteWebSocketAsync("/ws", ws => {
ws.OnMessage(frame => {
if (frame.Text == "request")
ws.Send("response");
});
});
См. WebSocketRoute для получения более подробной информации.
Обновления интерфейса
- Новые кнопки "копировать" для аннотаций и местоположения теста в HTML-отчете.
- Вызовы методов маршрута, таких как Route.FulfillAsync(), больше не отображаются в отчете и просмотрщике трассировки. Вы можете увидеть, какие сетевые запросы были маршрутизированы, на вкладке сети.
- Новые кнопки "Копировать как cURL" и "Копировать как fetch" для запросов на вкладке сети.
Разное
- Новый метод Page.RequestGCAsync() может помочь обнаружить утечки памяти.
- Запросы, выполненные 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/dotnet:v1.47.0
теперь предоставляет образ Playwright на основе Ubuntu 24.04 Noble. Чтобы использовать образ на основе 22.04 jammy, используйтеmcr.microsoft.com/playwright/dotnet:v1.47.0-jammy
.- Теги
:latest
/:focal
/:jammy
для образов Playwright Docker больше не публикуются. Закрепите на конкретной версии для лучшей стабильности и воспроизводимости. - Клиентские сертификаты TLS теперь могут передаваться из памяти, передавая ClientCertificates.Cert и ClientCertificates.Key в виде массивов байтов вместо путей к файлам.
- NoWaitAfter в Locator.SelectOptionAsync() был устаревшим.
- Мы видели сообщения о неправильной работе 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.NewContextAsync() и ApiRequest.NewContextAsync(). Следующий фрагмент кода настраивает клиентский сертификат для https://example.com
:
var context = await Browser.NewContextAsync(new() {
ClientCertificates = [
new() {
Origin = "https://example.com",
CertPath = "client-certificates/cert.pem",
KeyPath = "client-certificates/key.pem",
}
]
});
Обновления просмотрщика трассировки
- Содержимое текстовых вложений теперь отображается в строке в панели вложений.
- Новая настройка для отображения/скрытия действий маршрутизации, таких как Route.ContinueAsync().
- Метод и статус запроса отображаются на вкладке сетевых деталей.
- Новая кнопка для копирования местоположения исходного файла в буфер обмена.
- Панель метаданных теперь отображает
BaseURL
.
Разное
- Новая опция
maxRetries
в ApiRequestContext.FetchAsync(), которая повторяет попытки при сетевой ошибке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` будет прогрессировать по мере срабатывания таймеров.
await Page.Clock.InstallAsync(new()
{
TimeDate = new DateTime(2024, 2, 2, 8, 0, 0)
});
await Page.GotoAsync("http://localhost:3333");
// Предположим, что пользователь закрыл крышку ноутбука и снова открыл ее в 10 утра.
// Приостановите время, как только достигнете этой точки.
await Page.Clock.PauseAtAsync(new DateTime(2024, 2, 2, 10, 0, 0));
// Проверьте состояние страницы.
await Expect(Page.GetByTestId("current-time")).ToHaveTextAsync("2/2/2024, 10:00:00 AM");
// Снова закройте крышку ноутбука и откройте ее в 10:30 утра.
await Page.Clock.FastForwardAsync("30:00");
await Expect(Page.GetByTestId("current-time")).ToHaveTextAsync("2/2/2024, 10:30:00 AM");
См. руководство по часам для получения более подробной информации.
Разное
-
Метод Locator.SetInputFilesAsync() теперь поддерживает загрузку каталога для элементов
<input type=file webkitdirectory>
.await page.GetByLabel("Upload directory").SetInputFilesAsync("mydir");
-
Несколько методов, таких как Locator.ClickAsync() или Locator.PressAsync(), теперь поддерживают модификаторную клавишу
ControlOrMeta
. Эта клавиша сопоставляется сMeta
на macOS и сControl
на Windows и Linux.// Нажмите общую комбинацию клавиш Control+S или Meta+S, чтобы вызвать операцию "Сохранить".
await page.Keyboard.PressAsync("ControlOrMeta+S"); -
Новое свойство
httpCredentials.send
в ApiRequest.NewContextAsync(), которое позволяет либо всегда отправлять заголовок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
Проверки доступности
-
Expect(Locator).ToHaveAccessibleNameAsync() проверяет, имеет ли элемент указанное доступное имя:
var locator = Page.GetByRole(AriaRole.Button);
await Expect(locator).ToHaveAccessibleNameAsync("Submit"); -
Expect(Locator).ToHaveAccessibleDescriptionAsync() проверяет, имеет ли элемент указанное доступное описание:
var locator = Page.GetByRole(AriaRole.Button);
await Expect(locator).ToHaveAccessibleDescriptionAsync("Upload a photo"); -
Expect(Locator).ToHaveRoleAsync() проверяет, имеет ли элемент указанную роль ARIA:
var locator = Page.GetByTestId("save-button");
await Expect(locator).ToHaveRoleAsync(AriaRole.Button);
Обработчик локаторов
- После выполнения обработчика, добавленного с помощью Page.AddLocatorHandlerAsync(), Playwright теперь будет ждать, пока оверлей, вызвавший обработчик, больше не будет виден. Вы можете отказаться от этого поведения с помощью новой опции
NoWaitAfter
. - Вы можете использовать новую опцию
Times
в Page.AddLocatorHandlerAsync(), чтобы указать максимальное количество раз, которое обработчик должен быть выполнен. - Обработчик в Page.AddLocatorHandlerAsync() теперь принимает локатор в качестве аргумента.
- Новый метод Page.RemoveLocatorHandlerAsync() для удаления ранее добавленных обработчиков локаторов.
var locator = Page.GetByText("This interstitial covers the button");
await Page.AddLocatorHandlerAsync(locator, async (overlay) =>
{
await overlay.Locator("#close").ClickAsync();
}, new() { Times = 3, NoWaitAfter = true });
// Запустите ваши тесты, которые могут быть прерваны оверлеем.
// ...
await Page.RemoveLocatorHandlerAsync(locator);
Разные опции
-
Новый метод FormData.Append() позволяет указывать повторяющиеся поля с одинаковым именем в опции
Multipart
вAPIRequestContext.FetchAsync()
:var formData = Context.APIRequest.CreateFormData();
formData.Append("file", new FilePayload()
{
Name = "f1.js",
MimeType = "text/javascript",
Buffer = System.Text.Encoding.UTF8.GetBytes("var x = 2024;")
});
formData.Append("file", new FilePayload()
{
Name = "f2.txt",
MimeType = "text/plain",
Buffer = System.Text.Encoding.UTF8.GetBytes("hello")
});
var response = await Context.APIRequest.PostAsync("https://example.com/uploadFiles", new() { Multipart = formData }); -
Expect(Page).ToHaveURLAsync() теперь поддерживает опцию
IgnoreCase
option.
Версии браузеров
- Chromium 125.0.6422.14
- Mozilla Firefox 125.0.1
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 124
- Microsoft Edge 124
Версия 1.43
Новые API
-
Метод BrowserContext.ClearCookiesAsync() теперь поддерживает фильтры для удаления только некоторых файлов cookie.
// Очистить все файлы cookie.
await Context.ClearCookiesAsync();
// Новое: очистить файлы cookie с определенным именем.
await Context.ClearCookiesAsync(new() { Name = "session-id" });
// Новое: очистить файлы cookie для определенного домена.
await Context.ClearCookiesAsync(new() { Domain = "my-origin.com" }); -
Новое свойство Locator.ContentFrame преобразует объект Locator в FrameLocator. Это может быть полезно, когда у вас есть объект Locator, полученный где-то, и позже вы хотите взаимодействовать с содержимым внутри фрейма.
var locator = Page.Locator("iframe[name='embedded']");
// ...
var frameLocator = locator.ContentFrame;
await frameLocator.GetByRole(AriaRole.Button).ClickAsync(); -
Новое свойство FrameLocator.Owner преобразует объект FrameLocator в Locator. Это может быть полезно, когда у вас есть объект FrameLocator, полученный где-то, и позже вы хотите взаимодействовать с элементом
iframe
.var frameLocator = page.FrameLocator("iframe[name='embedded']");
// ...
var locator = frameLocator.Owner;
await Expect(locator).ToBeVisibleAsync();
Версии браузеров
- Chromium 124.0.6367.8
- Mozilla Firefox 124.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 123
- Microsoft Edge 123
Версия 1.42
Новый обработчик локаторов
Новый метод Page.AddLocatorHandlerAsync() регистрирует обратный вызов, который будет вызван, когда указанный элемент станет видимым и может блокировать действия Playwright. Обратный вызов может избавиться от оверлея. Вот пример, который закрывает диалоговое окно cookie, когда оно появляется.
// Настройте обработчик.
await Page.AddLocatorHandlerAsync(
Page.GetByRole(AriaRole.Heading, new() { Name = "Hej! You are in control of your cookies." }),
async () =>
{
await Page.GetByRole(AriaRole.Button, new() { Name = "Accept all" }).ClickAsync();
});
// Напишите тест как обычно.
await Page.GotoAsync("https://www.ikea.com/");
await Page.GetByRole(AriaRole.Link, new() { Name = "Collection of blue and white" }).ClickAsync();
await Expect(Page.GetByRole(AriaRole.Heading, new() { Name = "Light and easy" })).ToBeVisibleAsync();
Новые API
- Page.PdfAsync() принимает две новые опции Tagged и Outline.
Объявления
- ⚠️ Ubuntu 18 больше не поддерживается.
Версии браузеров
- Chromium 123.0.6312.4
- Mozilla Firefox 123.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 122
- Microsoft Edge 123
Версия 1.41
Новые API
- Новый метод Page.UnrouteAllAsync() удаляет все маршруты, зарегистрированные с помощью Page.RouteAsync() и Page.RouteFromHARAsync(). Опционально позволяет дождаться завершения текущих маршрутов или игнорировать любые ошибки от них.
- Новый метод BrowserContext.UnrouteAllAsync() удаляет все маршруты, зарегистрированные с помощью BrowserContext.RouteAsync() и BrowserContext.RouteFromHARAsync(). Опционально позволяет дождаться завершения текущих маршрутов или игнорировать любые ошибки от них.
- Новые опции Style в Page.ScreenshotAsync() и Style в Locator.ScreenshotAsync() для добавления пользовательского CSS на страницу перед созданием снимка экрана.
Версии браузеров
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 120
- Microsoft Edge 120
Версия 1.40
Обновление генератора тестов
Новые инструменты для генерации проверок:
- Инструмент "Assert visibility" генерирует Expect(Locator).ToBeVisibleAsync().
- Инструмент "Assert value" генерирует Expect(Locator).ToHaveValueAsync().
- Инструмент "Assert text" генерирует Expect(Locator).ToContainTextAsync().
Вот пример сгенерированного теста с проверками:
await Page.GotoAsync("https://playwright.dev/");
await Page.GetByRole(AriaRole.Link, new() { Name = "Get started" }).ClickAsync();
await Expect(Page.GetByLabel("Breadcrumbs").GetByRole(AriaRole.List)).ToContainTextAsync("Installation");
await Expect(Page.GetByLabel("Search")).ToBeVisibleAsync();
await Page.GetByLabel("Search").ClickAsync();
await Page.GetByPlaceholder("Search docs").FillAsync("locator");
await Expect(Page.GetByPlaceholder("Search docs")).ToHaveValueAsync("locator");
Новые API
- Опции Reason в Page.CloseAsync(), Reason в BrowserContext.CloseAsync() и Reason в Browser.CloseAsync(). Причина закрытия сообщается для всех операций, прерванных закрытием.
- Опция FirefoxUserPrefs в BrowserType.LaunchPersistentContextAsync().
Другие изменения
- Методы Download.PathAsync() и Download.CreateReadStreamAsync() выбрасывают ошибку для неудачных и отмененных загрузок.
- Образ Playwright docker image теперь поставляется с .NET 8 (новый LTS).
Версии браузеров
- Chromium 120.0.6099.28
- Mozilla Firefox 119.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 119
- Microsoft Edge 119
Версия 1.39
Обновление evergreen браузеров.
Версии браузеров
- Chromium 119.0.6045.9
- Mozilla Firefox 118.0.1
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 118
- Microsoft Edge 118
Версия 1.38
Обновления Trace Viewer
- Увеличение временного диапазона.
- Переработка панели сети.
Новые API
Устаревшие функции
- Следующие методы были устаревшими: Page.TypeAsync(), Frame.TypeAsync(), Locator.TypeAsync() и ElementHandle.TypeAsync(). Пожалуйста, используйте Locator.FillAsync(), который работает намного быстрее. Используйте Locator.PressSequentiallyAsync() только в случае, если на странице есть специальная обработка клавиатуры, и вам нужно нажимать клавиши по одной.
Версии браузеров
- Chromium 117.0.5938.62
- Mozilla Firefox 117.0
- WebKit 17.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 116
- Microsoft Edge 116
Версия 1.37
📚 Поддержка 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
Версия 1.36
🏝️ Летний выпуск по техническому обслуживанию.
Версии браузеров
- Chromium 115.0.5790.75
- Mozilla Firefox 115.0
- WebKit 17.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 114
- Microsoft Edge 114
Версия 1.35
Основные моменты
-
Новая опция
MaskColor
для методов Page.ScreenshotAsync() и Locator.ScreenshotAsync() для изменения цвета маски по умолчанию. -
Новая команда CLI
uninstall
для удаления бинарных файлов браузера:$ pwsh bin/Debug/netX/playwright.ps1 uninstall # удалить браузеры, установленные этой установкой
$ pwsh bin/Debug/netX/playwright.ps1 uninstall --all # удалить все когда-либо установленные браузеры Playwright
Версии браузеров
- Chromium 115.0.5790.13
- Mozilla Firefox 113.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 114
- Microsoft Edge 114
Версия 1.34
Основные моменты
-
Новый Locator.And() для создания локатора, который соответствует обоим локаторам.
var button = page.GetByRole(AriaRole.BUTTON).And(page.GetByTitle("Subscribe"));
-
Новые события BrowserContext.Console и BrowserContext.Dialog для подписки на любые диалоги и сообщения консоли с любой страницы из данного контекста браузера. Используйте новые методы ConsoleMessage.Page и Dialog.Page для определения источника события.
Версии браузеров
- Chromium 114.0.5735.26
- Mozilla Firefox 113.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 113
- Microsoft Edge 113
Версия 1.33
Обновление локаторов
-
Используйте Locator.Or() для создания локатора, который соответствует любому из двух локаторов. Рассмотрите сценарий, когда вы хотите нажать кнопку "Новое письмо", но иногда вместо этого появляется диалоговое окно настроек безопасности. В этом случае вы можете ожидать либо кнопку "Новое письмо", либо диалоговое окно и действовать соответственно:
var newEmail = Page.GetByRole(AriaRole.Button, new() { Name = "New email" });
var dialog = Page.GetByText("Confirm security settings");
await Expect(newEmail.Or(dialog)).ToBeVisibleAsync();
if (await dialog.IsVisibleAsync())
await Page.GetByRole(AriaRole.Button, new() { Name = "Dismiss" }).ClickAsync();
await newEmail.ClickAsync(); -
Используйте новые опции HasNot и HasNotText|HasNotTextRegex в Locator.Filter() для поиска элементов, которые не соответствуют определенным условиям.
var rowLocator = Page.Locator("tr");
await rowLocator
.Filter(new() { HasNotText = "text in column 1" })
.Filter(new() { HasNot = Page.GetByRole(AriaRole.Button, new() { Name = "column 2 button" })})
.ScreenshotAsync(); -
Используйте новое утверждение Expect(Locator).ToBeAttachedAsync(), чтобы убедиться, что элемент присутствует в DOM страницы. Не путайте с Expect(Locator).ToBeVisibleAsync(), которое гарантирует, что элемент как прикреплен, так и видим.
Новые API
- Locator.Or()
- Новая опция HasNot в Locator.Filter()
- Новая опция HasNotText|HasNotTextRegex в Locator.Filter()
- Expect(Locator).ToBeAttachedAsync()
- Новая опция Timeout в Route.FetchAsync()
⚠️ Изменение, нарушающее совместимость
mcr.microsoft.com/playwright/dotnet:v1.33.0
теперь предоставляет образ Playwright на основе Ubuntu Jammy. Чтобы использовать образ на основе focal, используйтеmcr.microsoft.com/playwright/dotnet:v1.33.0-focal
.
Версии браузеров
- Chromium 113.0.5672.53
- Mozilla Firefox 112.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 112
- Microsoft Edge 112
Версия 1.32
Новые API
- Новые опции UpdateMode и UpdateContent в Page.RouteFromHARAsync() и BrowserContext.RouteFromHARAsync().
- Связывание существующих объектов локаторов, см. документацию по локаторам для подробностей.
- Новая опция Name в методе Tracing.StartChunkAsync().
Версии браузеров
- Chromium 112.0.5615.29
- Mozilla Firefox 111.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 111
- Microsoft Edge 111
Версия 1.31
Новые API
-
Новое утверждение Expect(Locator).ToBeInViewportAsync() гарантирует, что локатор указывает на элемент, который пересекается с областью просмотра, в соответствии с API наблюдателя пересечений.
var locator = Page.GetByRole(AriaRole.Button);
// Убедитесь, что хотя бы часть элемента пересекается с областью просмотра.
await Expect(locator).ToBeInViewportAsync();
// Убедитесь, что элемент полностью вне области просмотра.
await Expect(locator).Not.ToBeInViewportAsync();
// Убедитесь, что хотя бы половина элемента пересекается с областью просмотра.
await Expect(locator).ToBeInViewportAsync(new() { Ratio = 0.5 }); -
Новые методы BrowserContext.NewCDPSessionAsync() и Browser.NewBrowserCDPSessionAsync() создают сессию Chrome DevTools Protocol для страницы и браузера соответственно.
Разное
- Снимки DOM в trace viewer теперь можно открывать в отдельном окне.
- Новая опция MaxRedirects для метода Route.FetchAsync().
- 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
Версия 1.30
Версии браузеров
- Chromium 110.0.5481.38
- Mozilla Firefox 108.0.2
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 109
- Microsoft Edge 109
Версия 1.29
Новые API
-
Новый метод Route.FetchAsync() и новая опция
Json
для Route.FulfillAsync():await Page.RouteAsync("**/api/settings", async route => {
// Получить оригинальные настройки.
var response = await route.FetchAsync();
// Установить тему настроек в предопределенное значение.
var json = await response.JsonAsync<MyDataType>();
json.Theme = "Solarized";
// Выполнить с измененными данными.
await route.FulfillAsync(new() {
Json = json
});
}); -
Новый метод Locator.AllAsync() для итерации по всем соответствующим элементам:
// Отметить все флажки!
var checkboxes = Page.GetByRole(AriaRole.Checkbox);
foreach (var checkbox in await checkboxes.AllAsync())
await checkbox.CheckAsync(); -
Locator.SelectOptionAsync() теперь соответствует по значению или метке:
<select multiple>
<option value="red">Red</option>
<option value="green">Green</option>
<option value="blue">Blue</option>
</select>await element.SelectOptionAsync("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() для поиска элемента по его заголовку.
await page.GetByLabel("User Name").FillAsync("John");
await page.GetByLabel("Password").FillAsync("secret-password");
await page.GetByRole(AriaRole.Button, new() { NameString = "Sign in" }).ClickAsync();
await Expect(Page.GetByText("Welcome, John!")).ToBeVisibleAsync();
Все те же методы также доступны в классах Locator, FrameLocator и Frame.
Другие основные моменты
- Как было объявлено в версии 1.25, Ubuntu 18 не будет поддерживаться с декабря 2022 года. В дополнение к этому, не будет обновлений WebKit на Ubuntu 18, начиная со следующего выпуска Playwright.
Изменения в поведении
-
Expect(Locator).ToHaveAttributeAsync() с пустым значением больше не соответствует отсутствующему атрибуту. Например, следующий фрагмент будет успешным, когда у
button
нет атрибутаdisabled
.await Expect(Page.GetByRole(AriaRole.Button)).ToHaveAttributeAsync("disabled", "");
Версии браузеров
- Chromium 107.0.5304.18
- Mozilla Firefox 105.0.1
- WebKit 16.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 106
- Microsoft Edge 106
Версия 1.26
Утверждения
- Новая опция
Enabled
для Expect(Locator).ToBeEnabledAsync(). - Expect(Locator).ToHaveTextAsync() теперь проникает в открытые теневые корни.
- Новая опция
Editable
для Expect(Locator).ToBeEditableAsync(). - Новая опция
Visible
для Expect(Locator).ToBeVisibleAsync(). - Expect(Response).ToBeOKAsync() теперь доступно.
Другие основные моменты
- Новая опция
MaxRedirects
для ApiRequestContext.GetAsync() и других для ограничения количества перенаправлений. - Codegen теперь поддерживает фреймворки MSTest и NUnit.
- ASP .NET теперь поддерживается.
Изменение поведения
Множество API Playwright уже поддерживают опцию WaitUntil: WaitUntilState.DOMContentLoaded
. Например:
await Page.GotoAsync("https://playwright.dev", new() { WaitUntil = WaitUntilState.DOMContentLoaded });
До версии 1.26 это ожидало, пока все фреймы не сгенерируют событие DOMContentLoaded
.
Чтобы соответствовать веб-спецификации, значение WaitUntilState.DOMContentLoaded
теперь ожидает, пока целевой фрейм не сгенерирует событие 'DOMContentLoaded'
. Используйте WaitUntil: WaitUntilState.Load
, чтобы дождаться всех фреймов.
Версии браузеров
- Chromium 106.0.5249.30
- Mozilla Firefox 104.0
- WebKit 16.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 105
- Microsoft Edge 105
Версия 1.25
Новая поддержка файла .runsettings
Microsoft.Playwright.NUnit
и Microsoft.Playwright.MSTest
теперь будут учитывать файл .runsettings
и переданные настройки через CLI при запуске end-to-end тестов. См. в документации полный список поддерживаемых настроек.
Теперь это работает:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- Playwright -->
<Playwright>
<BrowserName>chromium</BrowserName>
<ExpectTimeout>5000</ExpectTimeout>
<LaunchOptions>
<Headless>true</Headless>
<Channel>msedge</Channel>
</LaunchOptions>
</Playwright>
<!-- Общая конфигурация запуска -->
<RunConfiguration>
<EnvironmentVariables>
<!-- Для отладки селекторов рекомендуется установить следующую переменную окружения -->
<DEBUG>pw:api</DEBUG>
</EnvironmentVariables>
</RunConfiguration>
</RunSettings>
Объявления
- 🪦 Это последний выпуск с поддержкой 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 | ✅ | ✅ | ✅ |
Новые вводные документы
Мы переписали наши документы по началу работы, чтобы они были более ориентированы на end-to-end тестирование. Ознакомьтесь с ними на playwright.dev.
Версия 1.23
Тестирование API
Playwright для .NET 1.23 представляет новое тестирование API, которое позволяет отправлять запросы на сервер непосредственно из .NET! Теперь вы можете:
- тестировать ваш серверный API
- подготавливать состояние сервера перед посещением веб-приложения в тесте
- проверять серверные пост-условия после выполнения некоторых действий в браузере
Чтобы сделать запрос от имени страницы Playwright, используйте новый Page.APIRequest API:
// Выполнить GET-запрос от имени страницы
var response = await Page.APIRequest.GetAsync("http://example.com/foo.json");
Console.WriteLine(response.Status);
Console.WriteLine(response.StatusText);
Console.WriteLine(response.Ok);
Console.WriteLine(response.Headers["Content-Type"]);
Console.WriteLine(await response.TextAsync());
Console.WriteLine((await response.JsonAsync())?.GetProperty("foo").GetString());
Подробнее об этом читайте в нашем руководстве по тестированию API.
Воспроизведение сети
Теперь вы можете записывать сетевой трафик в файл HAR и повторно использовать этот трафик в ваших тестах.
Чтобы записать сеть в файл HAR:
pwsh bin/Debug/netX/playwright.ps1 open --save-har=example.har --save-har-glob="**/api/**" https://example.com
Кроме того, вы можете записать HAR программно:
var context = await browser.NewContextAsync(new()
{
RecordHarPath = harPath,
RecordHarUrlFilterString = "**/api/**",
});
// ... Выполнить действия ...
// Закрыть контекст, чтобы убедиться, что HAR сохранен на диск.
context.CloseAsync();
Используйте новые методы Page.RouteFromHARAsync() или BrowserContext.RouteFromHARAsync(), чтобы обслуживать соответствующие ответы из файла HAR:
await context.RouteFromHARAsync("example.har");
Подробнее читайте в нашей документации.
Расширенная маршрутизация
Теперь вы можете использовать Route.FallbackAsync() для передачи маршрутизации другим обработчикам.
Рассмотрите следующий пример:
// Удалить заголовок из всех запросов.
await page.RouteAsync("**/*", async route =>
{
var headers = route.Request.Headers;
headers.Remove("X-Secret");
await route.ContinueAsync(new() { Headers = headers });
});
// Прервать все изображения.
await page.RouteAsync("**/*", async route =>
{
if (route.Request.ResourceType == "image")
{
await route.AbortAsync();
}
else
{
await route.FallbackAsync();
}
});
Обратите внимание, что новые методы Page.RouteFromHARAsync() и BrowserContext.RouteFromHARAsync() также участвуют в маршрутизации и могут быть переданы.
Обновление Web-First Assertions
- Новый метод Expect(Locator).ToHaveValuesAsync(), который проверяет все выбранные значения элемента
<select multiple>
. - Методы Expect(Locator).ToContainTextAsync() и Expect(Locator).ToHaveTextAsync() теперь принимают опцию
ignoreCase
.
Разное
-
Если вам мешает service worker, теперь вы можете легко отключить его с помощью новой опции контекста
serviceWorkers
:var context = await Browser.NewContextAsync(new()
{
ServiceWorkers = ServiceWorkerPolicy.Block
}); -
Использование пути
.zip
для опции контекстаrecordHar
автоматически архивирует полученный HAR:var context = await Browser.NewContextAsync(new() { RecordHarPath = "example.har.zip" });
-
Если вы планируете редактировать HAR вручную, рассмотрите возможность использования режима записи HAR
"minimal"
, который записывает только информацию, необходимую для воспроизведения:var context = await Browser.NewContextAsync(new() { RecordHarPath = "example.har", RecordHarMode = HarMode.Minimal });
-
Playwright теперь работает на Ubuntu 22 amd64 и Ubuntu 22 arm64.
-
Playwright для .NET теперь поддерживает linux-arm64 и предоставляет arm64 Ubuntu 20.04 Docker image для него.
Версия 1.22
Основные моменты
-
Селекторы ролей, которые позволяют выбирать элементы по их ARIA роли, ARIA атрибутам и доступному имени.
// Нажмите кнопку с доступным именем "log in"
await page.Locator("role=button[name='log in']").ClickAsync();Подробнее читайте в нашей документации.
-
Новый API Locator.Filter() для фильтрации существующего локатора
var buttons = page.Locator("role=button");
// ...
var submitLocator = buttons.Filter(new() { HasText = "Sign up" });
await submitLocator.ClickAsync();
Версия 1.21
Основные моменты
-
Новые селекторы ролей, которые позволяют выбирать элементы по их ARIA роли, ARIA атрибутам и доступному имени.
// Нажмите кнопку с доступным именем "log in"
await page.Locator("role=button[name='log in']").ClickAsync();Подробнее читайте в нашей документации.
-
Новая опция
scale
в Page.ScreenshotAsync() для уменьшения размера скриншотов. -
Новая опция
caret
в Page.ScreenshotAsync() для управления текстовым курсором. По умолчанию"hide"
. -
Теперь мы поставляем специальный .NET docker image
mcr.microsoft.com/playwright/dotnet
. Подробнее читайте в нашей документации.
Изменения в поведении
- Playwright теперь поддерживает загрузку больших файлов (сотни МБ) через API Locator.SetInputFilesAsync().
Версии браузеров
- Chromium 101.0.4951.26
- Mozilla Firefox 98.0.2
- WebKit 15.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 100
- Microsoft Edge 100
Версия 1.20
Web-First Assertions
Playwright для .NET 1.20 представляет Web-First Assertions.
Рассмотрим следующий пример:
using System.Threading.Tasks;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;
namespace PlaywrightTests;
[TestFixture]
public class ExampleTests : PageTest
{
[Test]
public async Task StatusBecomesSubmitted()
{
await Expect(Page.Locator(".status")).ToHaveTextAsync("Submitted");
}
}
Playwright будет повторно тестировать узел с селектором .status
, пока извлеченный узел не будет содержать текст "Submitted"
. Он будет повторно извлекать узел и проверять его снова и снова, пока условие не будет выполнено или не истечет время ожидания. Вы можете передать это время ожидания в качестве опции.
Подробнее читайте в нашей документации.
Другие обновления
- Новые опции для методов Page.ScreenshotAsync(), Locator.ScreenshotAsync() и ElementHandle.ScreenshotAsync():
- Опция
ScreenshotAnimations.Disabled
перематывает все CSS-анимации и переходы в согласованное состояние - Опция
mask: Locator[]
маскирует указанные элементы, накладывая на них розовые#FF00FF
блоки.
- Опция
- Locator.HighlightAsync() визуально выделяет элемент(ы) для упрощения отладки.
Объявления
- v1.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
, которая гарантирует, что он содержит другой локатор внутри:await Page.Locator("article", new() { Has = Page.Locator(".highlight") }).ClickAsync();
Подробнее читайте в документации по локаторам
-
Новый Locator.Page
-
Page.ScreenshotAsync() и Locator.ScreenshotAsync() теперь автоматически скрывают мигающий курсор
-
Playwright Codegen теперь генерирует локаторы и локаторы фреймов
Версии браузеров
- Chromium 100.0.4863.0
- Mozilla Firefox 96.0.1
- WebKit 15.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 98
- Microsoft Edge 98
Версия 1.18
Улучшения локаторов
-
Каждый локатор теперь может быть дополнительно отфильтрован по тексту, который он содержит:
await Page.Locator("li", new() { HasTextString = "My Item" })
.Locator("button").click();Подробнее читайте в документации по локаторам
Новые API и изменения
- Опция
AcceptDownloads
теперь по умолчанию установлена вtrue
. - Опция
Sources
для встраивания источников в трассировки.
Версии браузеров
- 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
и могут использоваться в Web-First утверждениях.
Локаторы фреймов могут быть созданы с помощью методов Page.FrameLocator() или Locator.FrameLocator().
var locator = page.FrameLocator("#my-frame").Locator("text=Submit");
await locator.ClickAsync();
Подробнее читайте в нашей документации.
Обновление 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:
pwsh bin/Debug/netX/playwright.ps1 install msedge
Новые API
- Трассировка теперь поддерживает опцию
'title'
- Навигация по страницам поддерживает новую опцию ожидания
'commit'
Версия 1.16
🎭 Библиотека Playwright
Locator.WaitForAsync
Ожидание разрешения локатора на один элемент с заданным состоянием. По умолчанию state: 'visible'
.
var orderSent = page.Locator("#order-sent");
orderSent.WaitForAsync();
Подробнее о Locator.WaitForAsync().
🎭 Playwright Trace Viewer
- запустите просмотрщик трассировок с помощью
pwsh bin/Debug/netX/playwright.ps1 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.WheelAsync() теперь можно прокручивать вертикально или горизонтально.
📜 Новый API заголовков
Ранее было невозможно получить несколько значений заголовков ответа. Теперь это возможно, и доступны дополнительные вспомогательные функции:
- Request.AllHeadersAsync()
- Request.HeadersArrayAsync()
- Request.HeaderValueAsync()
- Response.AllHeadersAsync()
- Response.HeadersArrayAsync()
- Response.HeaderValueAsync()
- Response.HeaderValuesAsync()
🌈 Эмуляция Forced-Colors
Теперь можно эмулировать CSS-медиафичу forced-colors
, передав ее в Browser.NewContextAsync() или вызвав Page.EmulateMediaAsync().
Новые API
- Page.RouteAsync() принимает новую опцию
times
, чтобы указать, сколько раз этот маршрут должен быть сопоставлен. - Page.SetCheckedAsync() и Locator.SetCheckedAsync() были введены для установки состояния флажка.
- Request.SizesAsync() Возвращает информацию о размере ресурса для данного HTTP-запроса.
- Tracing.StartChunkAsync() - Начать новый фрагмент трассировки.
- Tracing.StopChunkAsync() - Остановить новый фрагмент трассировки.
Важно ⚠
- ⬆ Приложения .NET Core 2.1 больше не поддерживаются для нашего CLI-инструментария. С 31 августа 2021 года .NET Core 2.1 больше не поддерживается и не будет получать обновления безопасности. Мы решили продвинуть CLI вперед и требовать .NET Core 3.1 как минимум.
Версии браузеров
- Chromium 96.0.4641.0
- Mozilla Firefox 92.0
- WebKit 15.0
Версия 1.14
⚡️ Новый "строгий" режим
Неоднозначность селекторов является распространенной проблемой в автоматизированном тестировании. "Строгий" режим гарантирует, что ваш селектор указывает на один элемент и выдает ошибку в противном случае.
Установите setStrict(true)
в ваших вызовах действий, чтобы включить его.
// Это вызовет ошибку, если у вас больше одной кнопки!
await page.Locator("button", new() { Strict = true });
📍 Новый API локаторов
Локатор представляет собой представление элемента(ов) на странице. Он захватывает логику, достаточную для получения элемента в любой момент времени.
Разница между Locator и ElementHandle заключается в том, что последний указывает на конкретный элемент, в то время как Locator захватывает логику, как получить этот элемент.
Кроме того, локаторы по умолчанию "строгие"!
var locator = page.Locator("button");
await locator.ClickAsync();
Узнайте больше в документации.
🧩 Экспериментальные React и Vue селекторные движки
Селекторы React и Vue позволяют выбирать элементы по имени их компонента и/или значениям свойств. Синтаксис очень похож на селекторы атрибутов и поддерживает все операторы селекторов атрибутов.
await page.Locator("_react=SubmitButton[enabled=true]").ClickAsync();
await page.Locator("_vue=submit-button[enabled=true]").ClickAsync();
Узнайте больше в документации по селекторам React и документации по селекторам Vue.
✨ Новые селекторные движки nth
и visible
nth
селекторный движок эквивалентен псевдоклассу:nth-match
, но может быть объединен с другими селекторными движками.visible
селекторный движок эквивалентен псевдоклассу:visible
, но может быть объединен с другими селекторными движками.
// выберите первую кнопку среди всех кнопок
await button.ClickAsync("button >> nth=0");
// или если вы используете локаторы, вы можете использовать First, Nth() и Last
await page.Locator("button").First.ClickAsync();
// нажмите видимую кнопку
await button.ClickAsync("button >> visible=true");
Версии браузеров
- Chromium 94.0.4595.0
- Mozilla Firefox 91.0
- WebKit 15.0
Версия 1.13
Playwright
- 🖖 Программная поддержка drag-and-drop через API Page.DragAndDropAsync().
- 🔎 Улучшенный HAR с размерами тел для запросов и ответов. Используйте через опцию
recordHar
в Browser.NewContextAsync().
Инструменты
- Playwright Trace Viewer теперь показывает параметры, возвращаемые значения и вызовы
console.log()
.
Новые и переработанные руководства
Версии браузеров
- Chromium 93.0.4576.0
- Mozilla Firefox 90.0
- WebKit 14.2
Новые API Playwright
- новая опция
baseURL
в Browser.NewContextAsync() и Browser.NewPageAsync() - Response.SecurityDetailsAsync() и Response.ServerAddrAsync()
- Page.DragAndDropAsync() и Frame.DragAndDropAsync()
- Download.CancelAsync()
- Page.InputValueAsync(), Frame.InputValueAsync() и ElementHandle.InputValueAsync()
- новая опция
force
в Page.FillAsync(), Frame.FillAsync() и ElementHandle.FillAsync() - новая опция
force
в Page.SelectOptionAsync(), Frame.SelectOptionAsync() и ElementHandle.SelectOptionAsync()
Версия 1.12
Основные моменты
- Playwright для .NET v1.12 теперь стабилен!
- Поставляется с инструментами codegen и trace viewer из коробки
Версии браузеров
- Chromium 93.0.4530.0
- Mozilla Firefox 89.0
- WebKit 14.2
Эта версия Playwright также была протестирована на следующих стабильных каналах:
- Google Chrome 91
- Microsoft Edge 91