Примечания к релизу
Версия 1.49
Снимки ARIA
Новая проверка expect(locator).toMatchAriaSnapshot() проверяет структуру страницы, сравнивая её с ожидаемым деревом доступности, представленным в YAML.
await page.goto('https://playwright.dev');
await expect(page.locator('body')).toMatchAriaSnapshot(`
- 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"
`); Вы можете сгенерировать эту проверку с помощью Генератора тестов и обновить ожидаемый снимок с помощью --update-snapshots флага командной строки.
Узнайте больше в руководстве по снимкам ARIA.
Запуск тестов
- Новый параметр testConfig.tsconfig позволяет указать единственный
tsconfigдля использования во всех тестах. - Новый метод test.fail.only() для фокусировки на не пройденном тесте.
- Параметры testConfig.globalSetup и testConfig.globalTeardown теперь поддерживают несколько установок/разборов.
- Новое значение
'on-first-failure'для testOptions.screenshot. - Добавлены кнопки "предыдущий" и "следующий" в отчёт HTML для быстрого переключения между тест-кейсами.
- Новые свойства testInfoError.cause и testError.cause, отражающие
Error.cause.
Прерывание: каналы chrome, msedge и аналогичные переключаются на новый бесголовый режим
Это изменение повлияет на вас, если вы используете один из следующих каналов в вашей playwright.config.ts:
-
chrome,chrome-dev,chrome-beta, илиchrome-canary -
msedge,msedge-dev,msedge-beta, илиmsedge-canary
Что мне нужно сделать?
После обновления до Playwright v1.49 запустите свой набор тестов. Если он всё ещё проходит, всё в порядке. Если нет, вам, вероятно, потребуется обновить ваши снимки и адаптировать часть вашего кода тестов для работы с PDF-просмотрщиками и расширениями. См. вопрос #33566 для получения более подробной информации.
Другие прерывающие изменения
- Больше не будет обновлений для WebKit на Ubuntu 20.04 и Debian 11. Рекомендуется обновить вашу ОС до более поздней версии.
- Пакет
@playwright/experimental-ct-vue2больше не будет обновляться. - Пакет
@playwright/experimental-ct-solidбольше не будет обновляться.
Попробуйте новый бесголовый Chromium
Вы можете включить новый бесголовый режим, используя 'chromium' канал. Как указывает официальная документация Chrome:
Новый бесголовый режим, с другой стороны, — это настоящий браузер Chrome, и поэтому он более достоверен, надёжен и предлагает больше функций. Это делает его более подходящим для высокоточного тестирования веб-приложений по принципу «конец-конец» или тестирования расширений браузера.
См. вопрос #33566 для списка возможных проблем, с которыми вы можете столкнуться, и более подробной информации о бесголовом Chromium. Пожалуйста, создайте вопрос, если вы увидите какие-либо проблемы после включения.
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'], channel: 'chromium' },
},
],
}); Разное
-
<canvas>элементы внутри снимка теперь отображают предварительный просмотр. - Новый метод tracing.group() для визуального группирования действий в трассировке.
- Изображения Playwright Docker переключились с Node.js v20 на Node.js v22 LTS.
Версии браузеров
- 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".
await page.routeWebSocket('/ws', ws => {
ws.onMessage(message => {
if (message === 'request')
ws.send('response');
});
}); См. WebSocketRoute для получения более подробной информации.
Обновления пользовательского интерфейса
- Новые кнопки "копировать" для аннотаций и расположения тестов в отчете HTML.
- Вызовы методов маршрутизации, такие как route.fulfill(), больше не отображаются в представлении отчета и трассировки. Вместо этого вы можете посмотреть маршрутизированные сетевые запросы во вкладке сети.
- Новые кнопки "Скопировать как cURL" и "Скопировать как fetch" для запросов во вкладке сети.
Разное
- Параметр form и аналогичные теперь принимают FormData.
- Новый метод page.requestGC() может помочь в обнаружении утечек памяти.
- Новый параметр location для передачи пользовательского расположения шага.
- Запросы, сделанные с помощью APIRequestContext, теперь записывают подробную информацию о времени выполнения и безопасности в HAR.
Версии браузеров
- Chromium 130.0.6723.19
- Mozilla Firefox 130.0
- WebKit 18.0
Эта версия также была протестирована против следующих стабильных каналов:
- Google Chrome 129
- Microsoft Edge 129
Версия 1.47
Улучшения вкладки «Сеть»
Вкладка «Сеть» в режиме пользовательского интерфейса и представлении трассировки претерпела ряд улучшений:
- фильтрация по типу актива и URL
- лучшее отображение параметров строки запроса
- превью активов шрифтов
--tsconfig параметр командной строки
По умолчанию Playwright ищет ближайший tsconfig для каждого импортированного файла с использованием эвристики. Теперь вы можете указать единственный файл tsconfig в командной строке, и Playwright будет использовать его для всех импортированных файлов, а не только для файлов тестов:
# Pass a specific tsconfig npx playwright test --tsconfig tsconfig.test.json
APIRequestContext теперь принимает URLSearchParams и string в качестве параметров запроса
Теперь вы можете передавать URLSearchParams и string в качестве параметров запроса в APIRequestContext:
test('query params', async ({ request }) => {
const searchParams = new URLSearchParams();
searchParams.set('userId', 1);
const response = await request.get(
'https://jsonplaceholder.typicode.com/posts',
{
params: searchParams // or as a string: 'userId=1'
}
);
// ...
}); Разное
- Сервис
mcr.microsoft.com/playwright:v1.47.0теперь использует образ Playwright, основанный на Ubuntu 24.04 Noble. Для использования образа, основанного на 22.04 jammy, пожалуйста, используйтеmcr.microsoft.com/playwright:v1.47.0-jammy. - Новые опции behavior, behavior и behavior для ожидания завершения активных слушателей.
- Сертификаты TLS-клиента теперь могут передаваться из памяти путём передачи clientCertificates.cert и clientCertificates.key в качестве буферов вместо путей к файлам.
- Вложения с типом содержимого
text/htmlтеперь можно открыть в новой вкладке отчета HTML. Это полезно для включения отчетов сторонних разработчиков или другого HTML-содержимого в отчет Playwright и распространения его в вашей команде. - Опция noWaitAfter в 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 Client Authentication.
Следующий фрагмент кода настраивает сертификат клиента для https://example.com:
import { defineConfig } from '@playwright/test';
export default defineConfig({
// ...
use: {
clientCertificates: [{
origin: 'https://example.com',
certPath: './cert.pem',
keyPath: './key.pem',
passphrase: 'mysecretpassword',
}],
},
// ...
}); Вы также можете предоставить сертификаты клиента для конкретного тестового проекта или в качестве параметра browser.newContext() и apiRequest.newContext().
--only-changed опция командной строки
Новая опция командной строки --only-changed будет запускать только те файлы тестов, которые были изменены с последней коммита в git или со специфической "ref" git. Это также запустит все файлы тестов, которые импортируют любые изменённые файлы.
# Only run test files with uncommitted changes npx playwright test --only-changed # Only run test files changed relative to the "main" branch npx playwright test --only-changed=main
Тестирование компонентов: Новое router фикстура
Этот релиз добавляет экспериментальную router фикстуру для перехвата и обработки сетевых запросов в тестах компонентов. Есть два способа использовать фикстуру маршрутизатора:
- Вызов
router.route(url, handler), который работает аналогично page.route(). - Вызов
router.use(handlers)и передача обработчиков запросов библиотеки MSW в него.
Вот пример повторного использования ваших существующих обработчиков MSW в тесте.
import { handlers } from '@src/mocks/handlers';
test.beforeEach(async ({ router }) => {
// install common handlers before each test
await router.use(...handlers);
});
test('example test', async ({ mount }) => {
// test as usual, your handlers are active
// ...
}); Эта фикстура доступна только в тестах компонентов.
Обновления режима UI/Просмотр трассировок
- В режиме UI теперь отображаются аннотации тестов.
- Содержимое текстовых вложений теперь отображается непосредственно в окне вложений.
- Новая настройка для отображения/скрытия действий маршрутизации, таких как route.continue().
- Метод запроса и статус отображаются во вкладке сетевых данных.
- Новая кнопка для копирования местоположения исходного файла в буфер обмена.
- Панель метаданных теперь отображает
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 охватывает много распространённых сценариев, включая:
- тестирование с предварительно заданным временем;
- поддержание постоянного времени и таймеров;
- мониторинг неактивности;
- ручное продвижение времени.
// Initialize clock and let the page load naturally.
await page.clock.install({ time: new Date('2024-02-02T08:00:00') });
await page.goto('http://localhost:3333');
// Pretend that the user closed the laptop lid and opened it again at 10am,
// Pause the time once reached that point.
await page.clock.pauseAt(new Date('2024-02-02T10:00:00'));
// Assert the page state.
await expect(page.getByTestId('current-time')).toHaveText('2/2/2024, 10:00:00 AM');
// Close the laptop lid again and open it at 10:30am.
await page.clock.fastForward('30:00');
await expect(page.getByTestId('current-time')).toHaveText('2/2/2024, 10:30:00 AM'); См. руководство по часам для получения дополнительной информации.
Запуск тестов
-
Новая опция командной строки
--fail-on-flaky-testsустанавливает код выхода в1при любых ненадёжных тестах. Обратите внимание, что по умолчанию тестовый запуск завершается с кодом0при восстановлении всех неудачных тестов после повторной попытки. С этой опцией запуск теста завершится неудачно в таком случае. -
Новая переменная среды
PLAYWRIGHT_FORCE_TTYуправляет тем, предполагают ли встроенныеlist,lineиdotрепортеры терминал в реальном времени. Например, это может быть полезно для отключения поведения tty, когда ваша среда CI не хорошо обрабатывает последовательности ANSI. В качестве альтернативы, вы можете включить tty-поведение даже при наличии терминала в реальном времени, если вы планируете послеобрабатывать вывод и обрабатывать управляющие последовательности.# Avoid TTY features that output ANSI control sequences PLAYWRIGHT_FORCE_TTY=0 npx playwright test # Enable TTY features, assuming a terminal width 80 PLAYWRIGHT_FORCE_TTY=80 npx playwright test
-
Новые опции testConfig.respectGitIgnore и testProject.respectGitIgnore управляют тем, исключаются ли файлы, соответствующие
.gitignoreшаблонам, при поиске тестов. -
Новое свойство
timeoutтеперь доступно для пользовательских проверочных соответствий. Это свойство учитываетplaywright.config.tsиexpect.configure().import { expect as baseExpect } from '@playwright/test'; export const expect = baseExpect.extend({ async toHaveAmount(locator: Locator, expected: number, options?: { timeout?: number }) { // When no timeout option is specified, use the config timeout. const timeout = options?.timeout ?? this.timeout; // ... implement the assertion ... }, });
Разное
-
Метод locator.setInputFiles() теперь поддерживает загрузку каталога для элементов
<input type=file webkitdirectory>.await page.getByLabel('Upload directory').setInputFiles(path.join(__dirname, 'mydir')); -
Несколько методов, таких как locator.click() или locator.press() теперь поддерживают модификаторную клавишу
ControlOrMeta. Эта клавиша соответствуетMetaна macOS и соответствуетControlна Windows и Linux.// Press the common keyboard shortcut Control+S or Meta+S to trigger a "Save" operation. await page.keyboard.press('ControlOrMeta+S'); -
Новое свойство
httpCredentials.sendв apiRequest.newContext(), которое позволяет всегда отправлять заголовокAuthorizationили отправлять его только в ответ на401 Unauthorized. -
Новая опция
reasonв apiRequestContext.dispose(), которая будет включена в сообщение об ошибке прерванных операций при удалении контекста. -
Новая опция
hostв browserType.launchServer() позволяет принимать websocket-соединения по определённому адресу вместо неопределённого0.0.0.0. -
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).toHaveAccessibleName() проверяет, есть ли у элемента указанное доступное имя:
const locator = page.getByRole('button'); await expect(locator).toHaveAccessibleName('Submit'); -
expect(locator).toHaveAccessibleDescription() проверяет, есть ли у элемента указанное доступное описание:
const locator = page.getByRole('button'); await expect(locator).toHaveAccessibleDescription('Upload a photo'); -
expect(locator).toHaveRole() проверяет, есть ли у элемента указанная ARIA роль:
const locator = page.getByTestId('save-button'); await expect(locator).toHaveRole('button');
Обработчик локатора
- После выполнения обработчика, добавленного с помощью page.addLocatorHandler(), Playwright будет ожидать, пока наложение, вызвавшее обработчик, больше не будет отображаться. Вы можете отказаться от этого поведения с помощью нового параметра
noWaitAfter. - Вы можете использовать новый параметр
timesв page.addLocatorHandler() для указания максимального количества запусков обработчика. - Обработчик в page.addLocatorHandler() теперь принимает локатор в качестве аргумента.
- Новый метод page.removeLocatorHandler() для удаления ранее добавленных обработчиков локаторов.
const locator = page.getByText('This interstitial covers the button');
await page.addLocatorHandler(locator, async overlay => {
await overlay.locator('#close').click();
}, { times: 3, noWaitAfter: true });
// Run your tests that can be interrupted by the overlay.
// ...
await page.removeLocatorHandler(locator); Различные параметры
-
multipartпараметр вapiRequestContext.fetch()теперь принимаетFormDataи поддерживает повторяющиеся поля с одинаковым именем.const formData = new FormData(); formData.append('file', new File(['let x = 2024;'], 'f1.js', { type: 'text/javascript' })); formData.append('file', new File(['hello'], 'f2.txt', { type: 'text/plain' })); context.request.post('https://example.com/uploadFiles', { multipart: formData }); -
expect(callback).toPass({ intervals })теперь можно настроить с помощью параметраexpect.toPass.intervalsглобально в testConfig.expect или по проекту в testProject.expect. -
expect(page).toHaveURL(url)теперь поддерживаетignoreCaseпараметр. -
testProject.ignoreSnapshots позволяет настроить по проекту, пропускать ли ожидания скриншотов.
API репортера
- Новый метод suite.entries() возвращает дочерние наборы тестов и тестовые случаи в порядке их объявления. suite.type и testCase.type можно использовать для различения тестовых случаев и наборов тестов в списке.
-
Репортер Blob теперь позволяет переопределить путь к файлу отчета с помощью одного параметра
outputFile. Тот же параметр также можно указать какPLAYWRIGHT_BLOB_OUTPUT_FILEпеременную окружения, что может быть удобнее в CI/CD. -
Репортер JUnit теперь поддерживает
includeProjectInTestNameпараметр.
Командная строка
-
--last-failedпараметр командной строки для запуска только тех тестов, которые завершились ошибкой в предыдущем запуске.Сначала запустите все тесты:
$ npx playwright test Running 103 tests using 5 workers ... 2 failed [chromium] › my-test.spec.ts:8:5 › two ───────────────────────────────────────────────────────── [chromium] › my-test.spec.ts:13:5 › three ────────────────────────────────────────────────────── 101 passed (30.0s)
Теперь исправить тесты, которые завершились ошибкой, и снова запустить Playwright с
--last-failedпараметром:$ npx playwright test --last-failed Running 2 tests using 2 workers 2 passed (1.2s)
Версии браузеров
- Chromium 125.0.6422.14
- Mozilla Firefox 125.0.1
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 124
- Microsoft Edge 124
Версия 1.43
Новые API
-
Метод browserContext.clearCookies() теперь поддерживает фильтры для удаления только некоторых куки.
// Clear all cookies. await context.clearCookies(); // New: clear cookies with a particular name. await context.clearCookies({ name: 'session-id' }); // New: clear cookies for a particular domain. await context.clearCookies({ domain: 'my-origin.com' }); -
Новый режим
retain-on-first-failureдля testOptions.trace. В этом режиме трассировка записывается для первого запуска каждого теста, но не для повторных запусков. При ошибке теста файл трассировки сохраняется, в противном случае он удаляется.import { defineConfig } from '@playwright/test'; export default defineConfig({ use: { trace: 'retain-on-first-failure', }, }); -
Новая свойство testInfo.tags предоставляет теги теста во время выполнения.
test('example', async ({ page }) => { console.log(test.info().tags); }); -
Новый метод locator.contentFrame() преобразует объект Locator в объект FrameLocator. Это может быть полезно, когда у вас есть объект Locator, полученный где-то, и позже вам нужно взаимодействовать с содержимым внутри фрейма.
const locator = page.locator('iframe[name="embedded"]'); // ... const frameLocator = locator.contentFrame(); await frameLocator.getByRole('button').click(); -
Новый метод frameLocator.owner() преобразует объект FrameLocator в объект Locator. Это может быть полезно, когда у вас есть объект FrameLocator, полученный где-то, и позже вам нужно взаимодействовать с
iframeэлементом.const frameLocator = page.frameLocator('iframe[name="embedded"]'); // ... const locator = frameLocator.owner(); await expect(locator).toBeVisible();
Изменения в режиме UI
- Просмотр тегов в списке тестов.
- Фильтрация по тегам, набрав
@fastили щелкнув по самому тегу. - Новые сочетания клавиш:
- "F5" для запуска тестов.
- "Shift F5" для остановки запуска тестов.
- "Ctrl `" для переключения вывода тестов.
Версии браузеров
- Chromium 124.0.6367.8
- Mozilla Firefox 124.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 123
- Microsoft Edge 123
Версия 1.42
Новые API
- Новый метод page.addLocatorHandler() регистрирует обратный вызов, который будет вызван, когда указанный элемент станет видимым и может заблокировать действия Playwright. Обратный вызов может избавиться от наложения. Вот пример, который закрывает диалог cookie, когда он появляется:
// Setup the handler.
await page.addLocatorHandler(
page.getByRole('heading', { name: 'Hej! You are in control of your cookies.' }),
async () => {
await page.getByRole('button', { name: 'Accept all' }).click();
});
// Write the test as usual.
await page.goto('https://www.ikea.com/');
await page.getByRole('link', { name: 'Collection of blue and white' }).click();
await expect(page.getByRole('heading', { name: 'Light and easy' })).toBeVisible(); -
expect(callback).toPass()таймаут теперь можно настроить с помощью параметраexpect.toPass.timeoutглобально или в конфигурации проекта - electronApplication.on('console') событие срабатывает, когда Electron основной процесс вызывает методы API консоли.
electronApp.on('console', async msg => {
const values = [];
for (const arg of msg.args())
values.push(await arg.jsonValue());
console.log(...values);
});
await electronApp.evaluate(() => console.log('hello', 5, { foo: 'bar' })); - Новый синтаксис для добавления тегов в тесты (@-токены в названии теста все еще поддерживаются):
test('test customer login', {
tag: ['@fast', '@login'],
}, async ({ page }) => {
// ...
}); Используйте параметр командной строки --grep для запуска только тестов с определенными тегами.
npx playwright test --grep @fast
-
--projectфлаг командной строки флаг теперь поддерживает символ подстановки «*»:
npx playwright test --project='*mobile*'
- Новый синтаксис для аннотаций тестов:
test('test full report', {
annotation: [
{ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/23180' },
{ type: 'docs', description: 'https://playwright.dev/docs/test-annotations#tag-tests' },
],
}, async ({ page }) => {
// ...
}); -
page.pdf() принимает два новых параметра
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.unrouteAll() удаляет все маршруты, зарегистрированные с помощью page.route() и page.routeFromHAR(). При необходимости позволяет дождаться завершения текущих маршрутов или игнорировать любые ошибки от них.
- Новый метод browserContext.unrouteAll() удаляет все маршруты, зарегистрированные с помощью browserContext.route() и browserContext.routeFromHAR(). При необходимости позволяет дождаться завершения текущих маршрутов или игнорировать любые ошибки от них.
- Новые параметры style в page.screenshot() и style в locator.screenshot() для добавления пользовательского CSS на страницу перед съемкой скриншота.
- Новый параметр
stylePathдля методов expect(page).toHaveScreenshot() и expect(locator).toHaveScreenshot() для применения пользовательского стилевого файла во время создания скриншота. - Новый параметр
fileNameдля репортера Blob для указания имени создаваемого отчета.
Версии браузеров
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 120
- Microsoft Edge 120
Версия 1.40
Обновление генератора тестов
Новые инструменты для генерации утверждений:
- Инструмент «Утвердить видимость» генерирует expect(locator).toBeVisible().
- Инструмент «Утвердить значение» генерирует expect(locator).toHaveValue().
- Инструмент «Утвердить текст» генерирует expect(locator).toContainText().
Вот пример сгенерированного теста с утверждениями:
import { test, expect } from '@playwright/test';
test('test', async ({ page }) => {
await page.goto('https://playwright.dev/');
await page.getByRole('link', { name: 'Get started' }).click();
await expect(page.getByLabel('Breadcrumbs').getByRole('list')).toContainText('Installation');
await expect(page.getByLabel('Search')).toBeVisible();
await page.getByLabel('Search').click();
await page.getByPlaceholder('Search docs').fill('locator');
await expect(page.getByPlaceholder('Search docs')).toHaveValue('locator');
}); Новые API
- Параметр reason в page.close(), reason в browserContext.close() и reason в browser.close(). Причина закрытия сообщается для всех операций, прерванных закрытием.
- Параметр firefoxUserPrefs в browserType.launchPersistentContext().
Другие изменения
- Методы download.path() и download.createReadStream() теперь возвращают ошибку при неудачных и отменённых загрузках.
- Изображение Playwright Docker теперь поставляется с Node.js v20.
Версии браузеров
- Chromium 120.0.6099.28
- Mozilla Firefox 119.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 119
- Microsoft Edge 119
Версия 1.39
Добавление пользовательских соответствий к expect
Вы можете расширить утверждения Playwright, предоставив пользовательские соответствия. Эти соответствия будут доступны в объекте expect.
import { expect as baseExpect } from '@playwright/test';
export const expect = baseExpect.extend({
async toHaveAmount(locator: Locator, expected: number, options?: { timeout?: number }) {
// ... see documentation for how to write matchers.
},
});
test('pass', async ({ page }) => {
await expect(page.getByTestId('cart')).toHaveAmount(5);
}); См. документацию для полного примера.
Объединение тестовых фикстур
Теперь вы можете объединять тестовые фикстуры из нескольких файлов или модулей:
import { mergeTests } from '@playwright/test';
import { test as dbTest } from 'database-test-utils';
import { test as a11yTest } from 'a11y-test-utils';
export const test = mergeTests(dbTest, a11yTest); import { test } from './fixtures';
test('passes', async ({ database, page, a11y }) => {
// use database and a11y fixtures.
}); Объединение пользовательских соответствий expect
Теперь вы можете объединять пользовательские соответствия expect из нескольких файлов или модулей:
import { mergeTests, mergeExpects } from '@playwright/test';
import { test as dbTest, expect as dbExpect } from 'database-test-utils';
import { test as a11yTest, expect as a11yExpect } from 'a11y-test-utils';
export const test = mergeTests(dbTest, a11yTest);
export const expect = mergeExpects(dbExpect, a11yExpect); import { test, expect } from './fixtures';
test('passes', async ({ page, database }) => {
await expect(database).toHaveDatabaseUser('admin');
await expect(page).toPassA11yAudit();
}); Скрыть детали реализации: шаги тестовых блоков
Вы можете отметить шаг test.step() как «заключенный в блок», чтобы ошибки внутри него указывали на место вызова шага.
async function login(page) {
await test.step('login', async () => {
// ...
}, { box: true }); // Note the "box" option here.
} Error: Timed out 5000ms waiting for expect(locator).toBeVisible()
... error details omitted ...
14 | await page.goto('https://github.com/login');
> 15 | await login(page);
| ^
16 | }); См. документацию test.step() для полного примера.
Новые API
Версии браузеров
- Chromium 119.0.6045.9
- Mozilla Firefox 118.0.1
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 118
- Microsoft Edge 118
Версия 1.38
Обновления режима UI
- Увеличение масштаба временного диапазона.
- Редизайн панели сети.
Новые API
- browserContext.on('weberror')
- locator.pressSequentially()
- Метод reporter.onEnd() теперь сообщает
startTimeи общее время выполненияduration.
Устаревшие методы
- Следующие методы устарели: page.type(), frame.type(), locator.type() и elementHandle.type(). Используйте locator.fill(), он намного быстрее. Используйте locator.pressSequentially() только если на странице используется специальная обработка клавиатуры, и вам нужно нажимать клавиши по одной.
Изменения, вносящие разрыв совместимости: Playwright больше не загружает браузеры автоматически
Примечание: Если вы используете
@playwright/testпакет, это изменение вас не затронет.
Playwright рекомендует использовать @playwright/test пакет и загружать браузеры с помощью команды npx playwright install. Если вы следуете этой рекомендации, ничего не изменилось.
Однако, до версии 1.38, установка пакета playwright вместо @playwright/test автоматически загружала браузеры. Это больше не так, и мы рекомендуем явно загружать браузеры с помощью команды npx playwright install.
v1.37 и ранее
playwright пакет загружал браузеры во время npm install, в то время как @playwright/test нет.
v1.38 и позднее
playwright и @playwright/test пакеты не загружают браузеры во время npm install.
Рекомендованная миграция
Запустите npx playwright install для загрузки браузеров после npm install. Например, в вашей конфигурации CI:
- run: npm ci - run: npx playwright install --with-deps
Альтернативный вариант миграции — не рекомендуется
Добавьте @playwright/browser-chromium, @playwright/browser-firefox и @playwright/browser-webkit в качестве зависимостей. Эти пакеты загружают соответствующие браузеры во время npm install. Убедитесь, что вы поддерживаете синхронизацию версии всех пакетов playwright:
// package.json
{
"devDependencies": {
"playwright": "1.38.0",
"@playwright/browser-chromium": "1.38.0",
"@playwright/browser-firefox": "1.38.0",
"@playwright/browser-webkit": "1.38.0"
}
} Версии браузеров
- Chromium 117.0.5938.62
- Mozilla Firefox 117.0
- WebKit 17.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 116
- Microsoft Edge 116
Версия 1.37
Новый инструмент npx playwright merge-reports
Если вы запускаете тесты на нескольких фрагментах, теперь вы можете объединить все отчеты в единый HTML-отчёт (или любой другой тип отчёта) с помощью нового инструмента командной строки merge-reports.
Использование инструмента merge-reports требует следующих шагов:
-
Добавление нового репортера "blob" в конфигурацию при запуске на CI:
export default defineConfig({ testDir: './tests', reporter: process.env.CI ? 'blob' : 'html', });Репортер "blob" создаст файлы ".zip", содержащие всю информацию о запуске тестов.
-
Копирование всех отчётов "blob" в одно общее место и запуск
npx playwright merge-reports:
npx playwright merge-reports --reporter html ./all-blob-reports
Подробнее читайте в нашей документации.
📚 Поддержка 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 | ✅ | ✅ | ✅ | ✅ |
Обновления режима UI
- Режим UI теперь учитывает зависимости проекта. Вы можете управлять зависимостями, которые нужно учитывать, отмечая/сняв флажки в списке проектов.
- Логи консоли из теста теперь отображаются во вкладке Консоль.
Версии браузеров
- 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
Основные улучшения
-
Режим UI теперь доступен в расширении VSCode Playwright через новую кнопку «Показать просмотр трассировки»:
-
Режим UI и просмотр трассировки теперь отмечают сетевые запросы, обработанные с помощью обработчиков page.route() и browserContext.route(), а также те, что были отправлены через тестирование API:
-
Новый параметр
maskColorдля методов page.screenshot(), locator.screenshot(), expect(page).toHaveScreenshot() и expect(locator).toHaveScreenshot() для изменения цвета маски по умолчанию:await page.goto('https://playwright.dev'); await expect(page).toHaveScreenshot({ mask: [page.locator('img')], maskColor: '#00FF00', // green }); -
Новая команда
uninstallCLI для удаления библиотек браузера:$ npx playwright uninstall # remove browsers installed by this installation $ npx playwright uninstall --all # remove all ever-install Playwright browsers
-
И режим UI, и просмотр трассировки теперь можно открыть во вкладке браузера:
$ npx playwright test --ui-port 0 # open UI mode in a tab on a random port $ npx playwright show-trace --port 0 # open trace viewer in tab on a random port
⚠️ Разрывы совместимости
-
playwright-coreбинарник был переименован изplaywrightвplaywright-core. Поэтому, если вы используете командуplaywright-coreCLI, убедитесь, что обновили имя:$ npx playwright-core install # the new way to install browsers when using playwright-core
Это изменение не влияет на пользователей пакетов
@playwright/testиplaywright.
Версии браузеров
- Chromium 115.0.5790.13
- Mozilla Firefox 113.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 114
- Microsoft Edge 114
Версия 1.34
Основные улучшения
-
Режим UI теперь отображает шаги, фикстуры и вложения:
-
Новое свойство testProject.teardown для указания проекта, который необходимо запустить после завершения этого и всех зависимых проектов. Разборка полезна для очистки любых ресурсов, полученных этим проектом.
Распространенным шаблоном была бы зависимость
setupс соответствующейteardown:import { defineConfig } from '@playwright/test'; export default defineConfig({ projects: [ { name: 'setup', testMatch: /global.setup\.ts/, teardown: 'teardown', }, { name: 'teardown', testMatch: /global.teardown\.ts/, }, { name: 'chromium', use: devices['Desktop Chrome'], dependencies: ['setup'], }, { name: 'firefox', use: devices['Desktop Firefox'], dependencies: ['setup'], }, { name: 'webkit', use: devices['Desktop Safari'], dependencies: ['setup'], }, ], }); -
Новый метод
expect.configureдля создания предварительно настроенного экземпляра expect с собственными значениями по умолчанию, такими какtimeoutиsoft.const slowExpect = expect.configure({ timeout: 10000 }); await slowExpect(locator).toHaveText('Submit'); // Always do soft assertions. const softExpect = expect.configure({ soft: true }); -
Новые параметры
stderrиstdoutв testConfig.webServer для настройки обработки вывода:import { defineConfig } from '@playwright/test'; export default defineConfig({ // Run your local dev server before starting the tests webServer: { command: 'npm run start', url: 'http://127.0.0.1:3000', reuseExistingServer: !process.env.CI, stdout: 'pipe', stderr: 'pipe', }, }); -
Новый метод locator.and() для создания локатора, соответствующего обоим локаторам.
const button = page.getByRole('button').and(page.getByTitle('Subscribe')); -
Новые события browserContext.on('console') и browserContext.on('dialog') для подписки на все диалоги и сообщения консоли со всех страниц из заданного контекста браузера. Используйте новые методы consoleMessage.page() и dialog.page() для определения источника события.
⚠️ Разрывы совместимости
-
npx playwright testбольше не работает, если вы установили какplaywright, так и@playwright/test. Нет необходимости устанавливать оба, поскольку вы всегда можете импортировать API автоматизации браузера из@playwright/testнапрямую:import { chromium, firefox, webkit } from '@playwright/test'; /* ... */ -
Node.js 14 больше не поддерживается, так как он достиг конца жизненного цикла 30 апреля 2023 года.
Версии браузеров
- Chromium 114.0.5735.26
- Mozilla Firefox 113.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 113
- Microsoft Edge 113
Версия 1.33
Обновление локаторов
-
Используйте locator.or() для создания локатора, соответствующего любому из двух локаторов. Рассмотрим сценарий, в котором вы хотите нажать кнопку «Новый email», но вместо этого иногда появляется диалоговое окно настроек безопасности. В этом случае вы можете дождаться либо кнопки «Новый email», либо диалогового окна и действовать соответственно:
const newEmail = page.getByRole('button', { name: 'New email' }); const dialog = page.getByText('Confirm security settings'); await expect(newEmail.or(dialog)).toBeVisible(); if (await dialog.isVisible()) await page.getByRole('button', { name: 'Dismiss' }).click(); await newEmail.click(); -
Используйте новые параметры hasNot и hasNotText в locator.filter() для поиска элементов, которые не соответствуют определенным условиям.
const rowLocator = page.locator('tr'); await rowLocator .filter({ hasNotText: 'text in column 1' }) .filter({ hasNot: page.getByRole('button', { name: 'column 2 button' }) }) .screenshot(); -
Используйте новое веб-первое утверждение expect(locator).toBeAttached() для проверки, что элемент присутствует в DOM страницы. Не путайте с expect(locator).toBeVisible(), который гарантирует, что элемент и прикреплён, и видимый.
Новые API
- locator.or()
- Новый параметр hasNot в locator.filter()
- Новый параметр hasNotText в locator.filter()
- expect(locator).toBeAttached()
- Новый параметр timeout в route.fetch()
- reporter.onExit()
⚠️ Разрыв совместимости
mcr.microsoft.com/playwright:v1.33.0теперь предоставляет образ Playwright, основанный на Ubuntu Jammy. Чтобы использовать образ, основанный на focal, используйтеmcr.microsoft.com/playwright:v1.33.0-focal.
Версии браузеров
- Chromium 113.0.5672.53
- Mozilla Firefox 112.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 112
- Microsoft Edge 112
Версия 1.32
Представление режима UI (превью)
Новый режим UI позволяет исследовать, запускать и отлаживать тесты. Поставляется со встроенным режимом наблюдения.

Взаимодействуйте с новым флагом --ui:
npx playwright test --ui
Новые API
- Новые параметры updateMode и updateContent в page.routeFromHAR() и browserContext.routeFromHAR().
- Цепочное вызов существующих объектов локатора, см. документацию по локаторам для подробностей.
- Новое свойство testInfo.testId.
- Новый параметр name в методе tracing.startChunk().
⚠️ Разрыв совместимости в тестах компонентов
Примечание: только для тестов компонентов, не влияет на тесты end-to-end.
-
@playwright/experimental-ct-reactтеперь поддерживает только React 18. - Если вы запускаете тесты компонентов с React 16 или 17, замените
@playwright/experimental-ct-reactна@playwright/experimental-ct-react17.
Версии браузеров
- Chromium 112.0.5615.29
- Mozilla Firefox 111.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 111
- Microsoft Edge 111
Версия 1.31
Новые API
-
Новое свойство testProject.dependencies для настройки зависимостей между проектами.
Использование зависимостей позволяет настроить глобальную настройку для создания трассировок и других артефактов, ознакомьтесь с шагами настройки в отчете об испытаниях и более подробной информацией.
import { defineConfig } from '@playwright/test'; export default defineConfig({ projects: [ { name: 'setup', testMatch: /global.setup\.ts/, }, { name: 'chromium', use: devices['Desktop Chrome'], dependencies: ['setup'], }, { name: 'firefox', use: devices['Desktop Firefox'], dependencies: ['setup'], }, { name: 'webkit', use: devices['Desktop Safari'], dependencies: ['setup'], }, ], }); -
Новое утверждение expect(locator).toBeInViewport() гарантирует, что локетор указывает на элемент, который пересекает область видимости, в соответствии с API наблюдателя пересечения.
const button = page.getByRole('button'); // Make sure at least some part of element intersects viewport. await expect(button).toBeInViewport(); // Make sure element is fully outside of viewport. await expect(button).not.toBeInViewport(); // Make sure that at least half of the element intersects viewport. await expect(button).toBeInViewport({ ratio: 0.5 });
Разное
- Снимки DOM в просмотре трассировки теперь можно открыть в отдельном окне.
- Новый метод
defineConfigдля использования вplaywright.config. - Новый параметр maxRedirects для метода route.fetch().
- Playwright теперь поддерживает Debian 11 arm64.
- Официальные образы Docker теперь включают Node 18 вместо Node 16.
⚠️ Разрыв совместимости в тестах компонентов
Примечание: только тесты компонентов, не влияет на тесты по всему приложению.
playwright-ct.config файл конфигурации для тестирования компонентов теперь требует вызова defineConfig.
// Before
import { type PlaywrightTestConfig, devices } from '@playwright/experimental-ct-react';
const config: PlaywrightTestConfig = {
// ... config goes here ...
};
export default config; Замените определение переменной config на вызов defineConfig:
// After
import { defineConfig, devices } from '@playwright/experimental-ct-react';
export default defineConfig({
// ... config goes here ...
}); Версии браузеров
- 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.fetch() и новый параметр
jsonдля route.fulfill():await page.route('**/api/settings', async route => { // Fetch original settings. const response = await route.fetch(); // Force settings theme to a predefined value. const json = await response.json(); json.theme = 'Solorized'; // Fulfill with modified data. await route.fulfill({ json }); }); -
Новый метод locator.all() для итерации по всем соответствующим элементам:
// Check all checkboxes! const checkboxes = page.getByRole('checkbox'); for (const checkbox of await checkboxes.all()) await checkbox.check(); -
locator.selectOption() теперь соответствует значению или метке:
<select multiple> <option value="red">Red</div> <option value="green">Green</div> <option value="blue">Blue</div> </select>
await element.selectOption('Red'); -
Повторные блоки кода, пока все утверждения не пройдут:
await expect(async () => { const response = await page.request.get('https://api.example.com'); await expect(response).toBeOK(); }).toPass();Подробнее в нашем руководстве.
-
Автоматически сохраняйте полный скриншот страницы при ошибке теста:
import { defineConfig } from '@playwright/test'; export default defineConfig({ use: { screenshot: { mode: 'only-on-failure', fullPage: true, } } });
Разное
- Playwright Test теперь учитывает
jsconfig.json. - Новые параметры
argsиproxyдля androidDevice.launchBrowser(). - Параметр
postDataв методе route.continue() теперь поддерживает значения сериализуемые.
Версии браузеров
- Chromium 109.0.5414.46
- Mozilla Firefox 107.0
- WebKit 16.4
Эта версия также была протестирована против следующих стабильных каналов:
- Google Chrome 108
- Microsoft Edge 108
Версия 1.28
Инструменты Playwright
- Запись на курсоре в VSCode. Вы можете запустить тест, поместить курсор в конец теста и продолжить генерацию теста.

- Живые локеторы в VSCode. Вы можете наводить курсор и редактировать локеторы в VSCode, чтобы выделить их в открытом браузере.
- Живые локеторы в CodeGen. Сгенерировать локетор для любого элемента на странице с помощью инструмента "Explore".

- Тёмная тема Codegen и просмотра трассировок. Автоматически выбирается из настроек операционной системы.

Запуск тестов
-
Настройте повторы и таймаут теста для файла или теста с помощью test.describe.configure().
// Each test in the file will be retried twice and have a timeout of 20 seconds. test.describe.configure({ retries: 2, timeout: 20_000 }); test('runs first', async ({ page }) => {}); test('runs second', async ({ page }) => {}); -
Используйте testProject.snapshotPathTemplate и testConfig.snapshotPathTemplate для настройки шаблона, контролирующего расположение снимков, созданных с помощью expect(page).toHaveScreenshot() и expect(value).toMatchSnapshot().
import { defineConfig } from '@playwright/test'; export default defineConfig({ testDir: './tests', snapshotPathTemplate: '{testDir}/__screenshots__/{testFilePath}/{arg}{ext}', });
Новые 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').fill('John');
await page.getByLabel('Password').fill('secret-password');
await page.getByRole('button', { name: 'Sign in' }).click();
await expect(page.getByText('Welcome, John!')).toBeVisible(); Все те же методы также доступны для классов Locator, FrameLocator и Frame.
Другие важные моменты
-
Параметр
workersвplaywright.config.tsтеперь принимает строку процента для использования части доступных ЦП. Вы также можете передать её в командной строке:npx playwright test --workers=20%
-
Новые параметры
hostиportдля отчета HTML.import { defineConfig } from '@playwright/test'; export default defineConfig({ reporter: [['html', { host: 'localhost', port: '9223' }]], }); -
Новое поле
FullConfig.configFileдоступно для отчётов о тестах, указывая путь к файлу конфигурации, если таковой имеется. -
Как было объявлено в v1.25, Ubuntu 18 больше не будет поддерживаться с декабря 2022 года. Кроме того, обновлений WebKit для Ubuntu 18 не будет начиная со следующего выпуска Playwright.
Изменения поведения
-
expect(locator).toHaveAttribute() с пустым значением больше не соответствует отсутствию атрибута. Например, следующий фрагмент будет успешным, когда
buttonне имеет атрибутаdisabled.await expect(page.getByRole('button')).toHaveAttribute('disabled', ''); -
Параметры командной строки
--grepи--grep-invertранее неправильно игнорировали параметрыgrepиgrepInvert, указанные в конфигурации. Теперь все они применяются вместе.
Версии браузеров
- Chromium 107.0.5304.18
- Mozilla Firefox 105.0.1
- WebKit 16.0
Эта версия также была протестирована с использованием следующих стабильных каналов:
- Google Chrome 106
- Microsoft Edge 106
Версия 1.26
Утверждения
- Новый параметр
enabledдля expect(locator).toBeEnabled(). - expect(locator).toHaveText() теперь проникает через тенированные корни.
- Новый параметр
editableдля expect(locator).toBeEditable(). - Новый параметр
visibleдля expect(locator).toBeVisible().
Другие важные моменты
- Новый параметр
maxRedirectsдля apiRequestContext.get() и других методов для ограничения количества переадресаций. - Новая командная строка
--pass-with-no-testsпозволяющая набору тестов пройти, если не найдено ни одного файла. - Новая командная строка
--ignore-snapshotsдля пропуска ожиданий снимков, таких какexpect(value).toMatchSnapshot()иexpect(page).toHaveScreenshot().
Изменение поведения
Множество API Playwright уже поддерживает параметр waitUntil: 'domcontentloaded'. Например:
await page.goto('https://playwright.dev', {
waitUntil: 'domcontentloaded',
});
До версии 1.26 это ожидание всех фреймов iframes для запуска события DOMContentLoaded.
В соответствии со спецификацией веб-стандартов, значение 'domcontentloaded' ожидает, только что целевой фрейм запустит событие 'DOMContentLoaded'. Используйте waitUntil: 'load' для ожидания запуска события во всех iframes.
Версии браузеров
- Chromium 106.0.5249.30
- Mozilla Firefox 104.0
- WebKit 16.0
Эта версия также была протестирована с использованием следующих стабильных каналов:
- Google Chrome 105
- Microsoft Edge 105
Версия 1.25
Расширение VSCode
- Наблюдайте за выполнением тестов в режиме реального времени и оставляйте открытые инструменты разработчика.
- Выбор селектора.
- Запись нового теста из текущего состояния страницы.

Запуск тестов
-
test.step() теперь возвращает значение функции шага:
test('should work', async ({ page }) => { const pageTitle = await test.step('get title', async () => { await page.goto('https://playwright.dev'); return await page.title(); }); console.log(pageTitle); }); -
Добавлен test.describe.fixme().
-
Новый статус теста
'interrupted'. -
Включить трассировку через флаг командной строки:
npx playwright test --trace=on.
Объявления
- 🎁 Мы теперь поставляем образ Docker Ubuntu 22.04 Jammy Jellyfish:
mcr.microsoft.com/playwright:v1.34.0-jammy. - 🪦 Это последняя версия с поддержкой macOS 10.15 (устарела с версии 1.21).
- 🪦 Это последняя версия с поддержкой Node.js 12, мы рекомендуем обновление до Node.js LTS (16).
- ⚠️ Ubuntu 18 теперь устарел и не будет поддерживаться с декабря 2022 года.
Версии браузеров
- Chromium 105.0.5195.19
- Mozilla Firefox 103.0
- WebKit 16.0
Эта версия также была протестирована с использованием следующих стабильных каналов:
- Google Chrome 104
- Microsoft Edge 104
Версия 1.24
🌍 Несколько веб-серверов в playwright.config.ts
Запустите несколько веб-серверов, баз данных или других процессов, передав массив конфигураций:
import { defineConfig } from '@playwright/test';
export default defineConfig({
webServer: [
{
command: 'npm run start',
url: 'http://127.0.0.1:3000',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
},
{
command: 'npm run backend',
url: 'http://127.0.0.1:3333',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
}
],
use: {
baseURL: 'http://localhost:3000/',
},
});
🐂 Поддержка Debian 11 Bullseye
Playwright теперь поддерживает Debian 11 Bullseye на x86_64 для Chromium, Firefox и WebKit. Сообщите нам, если вы столкнетесь с проблемами!
Поддержка Linux выглядит так:
| | Ubuntu 20.04 | Ubuntu 22.04 | Debian 11 | :--- | :---: | :---: | :---: | :---: | | Chromium | ✅ | ✅ | ✅ | | WebKit | ✅ | ✅ | ✅ | | Firefox | ✅ | ✅ | ✅ |
🕵️ Анонимное описание
Теперь можно вызвать test.describe() для создания наборов без заголовка. Это полезно для предоставления группе тестов общего параметра с помощью test.use().
test.describe(() => {
test.use({ colorScheme: 'dark' });
test('one', async ({ page }) => {
// ...
});
test('two', async ({ page }) => {
// ...
});
});
🧩 Обновление компонентных тестов
Компонентные тесты Playwright 1.24 вводят хуки beforeMount и afterMount. Используйте их для настройки приложения для тестов.
Например, это можно использовать для настройки маршрутизатора приложения в Vue.js:
import { test } from '@playwright/experimental-ct-vue';
import { Component } from './mycomponent';
test('should work', async ({ mount }) => {
const component = await mount(Component, {
hooksConfig: {
/* anything to configure your app */
}
});
}); import { router } from '../router';
import { beforeMount } from '@playwright/experimental-ct-vue/hooks';
beforeMount(async ({ app, hooksConfig }) => {
app.use(router);
});
Аналогичная конфигурация в Next.js будет выглядеть так:
import { test } from '@playwright/experimental-ct-react';
import { Component } from './mycomponent';
test('should work', async ({ mount }) => {
const component = await mount(<Component></Component>, {
// Pass mock value from test into `beforeMount`.
hooksConfig: {
router: {
query: { page: 1, per_page: 10 },
asPath: '/posts'
}
}
});
}); import router from 'next/router';
import { beforeMount } from '@playwright/experimental-ct-react/hooks';
beforeMount(async ({ hooksConfig }) => {
// Before mount, redefine useRouter to return mock value from test.
router.useRouter = () => hooksConfig.router;
});
Версия 1.23
Репликация сетевого трафика
Теперь вы можете записать сетевой трафик в файл HAR и повторно использовать этот трафик в своих тестах.
Для записи сетевого трафика в файл HAR:
npx playwright open --save-har=github.har.zip https://github.com/microsoft
В качестве альтернативы, вы можете записать HAR программно:
const context = await browser.newContext({
recordHar: { path: 'github.har.zip' }
});
// ... do stuff ...
await context.close();
Используйте новые методы page.routeFromHAR() или browserContext.routeFromHAR() для обслуживания соответствующих ответов из файла HAR:
await context.routeFromHAR('github.har.zip');
Подробнее читайте в нашей документации.
Расширенное маршрутизирование
Теперь вы можете использовать route.fallback() для делегирования маршрутизации другим обработчикам.
Рассмотрим следующий пример:
// Remove a header from all requests.
test.beforeEach(async ({ page }) => {
await page.route('**/*', async route => {
const headers = await route.request().allHeaders();
delete headers['if-none-match'];
await route.fallback({ headers });
});
});
test('should work', async ({ page }) => {
await page.route('**/*', async route => {
if (route.request().resourceType() === 'image')
await route.abort();
else
await route.fallback();
});
});
Обратите внимание, что новые методы page.routeFromHAR() и browserContext.routeFromHAR() также участвуют в маршрутизации и могут быть делегированы.
Обновление утверждений Web-First
- Новый метод expect(locator).toHaveValues(), который утверждает все выбранные значения элемента
<select multiple>. - Методы expect(locator).toContainText() и expect(locator).toHaveText() теперь принимают параметр
ignoreCase.
Обновление компонентных тестов
- Поддержка Vue2 с помощью пакета
@playwright/experimental-ct-vue2. - Поддержка компонентных тестов для create-react-app с компонентами в файлах
.js.
Подробнее о тестировании компонентов с помощью Playwright.
Разное
-
Если в вашем пути есть сервис-воркер, вы теперь можете легко его отключить с помощью нового параметра контекста
serviceWorkers:export default { use: { serviceWorkers: 'block', } }; -
Использование пути
.zipдля параметра контекстаrecordHarавтоматически архивирует полученный HAR:const context = await browser.newContext({ recordHar: { path: 'github.har.zip', } }); -
Если вы собираетесь редактировать HAR вручную, рассмотрите использование режима записи HAR
"minimal", который записывает только информацию, необходимую для воспроизведения:const context = await browser.newContext({ recordHar: { path: 'github.har', mode: 'minimal', } }); -
Playwright теперь работает на Ubuntu 22 amd64 и Ubuntu 22 arm64. Мы также публикуем новый образ Docker
mcr.microsoft.com/playwright:v1.34.0-jammy.
⚠️ Разрывающие изменения ⚠️
WebServer теперь считается «готовым», если запрос по указанному URL имеет один из следующих кодов состояния HTTP:
200-299-
300-399(новый) -
400,401,402,403(новый)
Версия 1.22
Основные моменты
-
Тестирование компонентов (превью)
Playwright Test теперь может тестировать ваши React, Vue.js или Svelte компоненты. Вы можете использовать все возможности Playwright Test (такие как распараллеливание, эмуляция и отладка), запустив компоненты в реальных браузерах.
Вот как выглядит типичный тест компонента:
import { test, expect } from '@playwright/experimental-ct-react'; import App from './App'; // Let's test component in a dark scheme! test.use({ colorScheme: 'dark' }); test('should render', async ({ mount }) => { const component = await mount(<App></App>); // As with any Playwright test, assert locator text. await expect(component).toContainText('React'); // Or do a screenshot 🚀 await expect(component).toHaveScreenshot(); // Or use any Playwright method await component.click(); });Подробнее читайте в нашей документации.
-
Селекторы ролей, позволяющие выбирать элементы по их ARIA роли, ARIA атрибутам и доступному имени.
// Click a button with accessible name "log in" await page.locator('role=button[name="log in"]').click();Подробнее читайте в нашей документации.
-
Новый API locator.filter() для фильтрации существующего селектора
const buttons = page.locator('role=button'); // ... const submitButton = buttons.filter({ hasText: 'Submit' }); await submitButton.click(); -
Новые веб-ориентированные проверки expect(page).toHaveScreenshot() и expect(locator).toHaveScreenshot(), которые ожидают стабилизации скриншота и повышают надёжность тестов.
Новые проверки имеют скриншоты по умолчанию, такие как:
- отключает анимации
- использует опцию масштабирования CSS
await page.goto('https://playwright.dev'); await expect(page).toHaveScreenshot();Новые expect(page).toHaveScreenshot() сохраняют скриншоты в том же месте, что и expect(value).toMatchSnapshot().
Версия 1.21
Основные моменты
-
Новые селекторы ролей, позволяющие выбирать элементы по их ARIA роли, ARIA атрибутам и доступному имени.
// Click a button with accessible name "log in" await page.locator('role=button[name="log in"]').click();Подробнее читайте в нашей документации.
-
Новая
scaleопция в page.screenshot() для скриншотов меньшего размера. -
Новая
caretопция в page.screenshot() для управления курсором текста. По умолчанию"hide". -
Новый метод
expect.pollдля ожидания произвольного условия:// Poll the method until it returns an expected result. await expect.poll(async () => { const response = await page.request.get('https://api.example.com'); return response.status(); }).toBe(200);expect.pollподдерживает большинство синхронных матчеров, таких как.toBe(),.toContain(), и т.д. Подробнее читайте в нашей документации.
Изменения в поведении
- Поддержка ESM при запуске тестов TypeScript теперь включена по умолчанию. Переменная среды
PLAYWRIGHT_EXPERIMENTAL_TS_ESMбольше не требуется. - Изображение Docker
mcr.microsoft.com/playwrightбольше не содержит Python. Используйтеmcr.microsoft.com/playwright/pythonкак изображение Docker, готовое к использованию с Playwright и предварительно установленным Python. - 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():
- Параметр
animations: "disabled"перематывает все анимации и переходы CSS в согласованное состояние - Параметр
mask: Locator[]маскирует заданные элементы, накладывая на них розовые#FF00FFрамки.
- Параметр
-
expect().toMatchSnapshot()теперь поддерживает анонимные снимки: когда имя снимка отсутствует, Playwright Test сгенерирует его автоматически:expect('Web is Awesome <3').toMatchSnapshot(); -
Новые
maxDiffPixelsиmaxDiffPixelRatioпараметры для точного сравнения скриншотов с помощьюexpect().toMatchSnapshot():expect(await page.screenshot()).toMatchSnapshot({ maxDiffPixels: 27, // allow no more than 27 different pixels. });Удобно задать
maxDiffPixelsилиmaxDiffPixelRatioодин раз в testConfig.expect. -
Playwright Test теперь добавляет режим testConfig.fullyParallel. По умолчанию Playwright Test распараллеливает запуск между файлами. В режиме полностью параллельного запуска тесты внутри одного файла также выполняются параллельно. Вы также можете использовать
--fully-parallelфлаг командной строки.export default { fullyParallel: true, }; -
testProject.grep и testProject.grepInvert теперь настраиваются на проект. Например, теперь можно настроить проект для тестов приёма используя
grep:export default { projects: [ { name: 'smoke tests', grep: /@smoke/, }, ], }; -
Просмотр трассировки теперь отображает запросы API-тестирования.
-
locator.highlight() визуально выделяет элемент(ы) для более удобной отладки.
Объявления
- Теперь предоставляется выделенное изображение Docker для Python
mcr.microsoft.com/playwright/python. Переключитесь на него, если используете Python. Это последний выпуск, включающий Python в нашем javascriptmcr.microsoft.com/playwrightконтейнере Docker. - 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
Обновление Playwright Test
-
Playwright Test v1.19 теперь поддерживает мягкие проверки. Ошибки мягких проверок
не прерывают выполнение теста, а помечают тест как не пройденный.
// Make a few checks that will not stop the test when failed... await expect.soft(page.locator('#status')).toHaveText('Success'); await expect.soft(page.locator('#eta')).toHaveText('1 day'); // ... and continue the test to check more things. await page.locator('#next-page').click(); await expect.soft(page.locator('#title')).toHaveText('Make another order');Подробнее читайте в нашей документации
-
Теперь вы можете указать собственное сообщение проверки как второй аргумент функций
expectиexpect.soft, например:await expect(page.locator('text=Name'), 'should be logged in').toBeVisible();Ошибка будет выглядеть так:
Error: should be logged in Call log: - expect.toBeVisible with timeout 5000ms - waiting for "getByText('Name')" 2 | 3 | test('example test', async({ page }) => { > 4 | await expect(page.locator('text=Name'), 'should be logged in').toBeVisible(); | ^ 5 | }); 6 |Подробнее читайте в нашей документации
-
По умолчанию тесты в одном файле выполняются в порядке. Если у вас много независимых тестов в одном файле, вы можете запустить их параллельно с помощью test.describe.configure().
Другие обновления
-
Селектор теперь поддерживает
hasпараметр, который гарантирует, что он содержит другой селектор внутри:await page.locator('article', { has: page.locator('.highlight'), }).click();Подробнее читайте в документации селектора
-
Новый locator.page()
-
page.screenshot() и locator.screenshot() теперь автоматически скрывают мигающий курсор
-
Playwright Codegen теперь генерирует селекторы и селекторы фреймов
-
Новый параметр
urlв testConfig.webServer для обеспечения готовности вашего веб-сервера перед запуском тестов -
Новые testInfo.errors и testResult.errors, содержащие все не пройденные проверки и мягкие проверки.
Возможные нарушения в глобальной настройке Playwright Test
Вероятность того, что это изменение повлияет на вас, невелика. Если ваши тесты продолжают работать так же, как и раньше, никаких действий предпринимать не нужно.
Мы заметили, что в редких случаях набор тестов, подлежащих выполнению, настраивался в глобальной настройке с помощью переменных окружения. Также мы заметили некоторые приложения, которые пост-обрабатывали вывод репортеров в глобальном завершении. Если вы делаете одно из двух, подробнее
Версии браузеров
- 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', { hasText: 'my item' }).locator('button').click();Подробнее читайте в документации локатора
Улучшения API тестирования
Улучшенная поддержка TypeScript
- Playwright Test теперь учитывает
tsconfig.jsonbaseUrlиpaths, поэтому вы можете использовать псевдонимы - Есть новая переменная окружения
PW_EXPERIMENTAL_TS_ESM, которая позволяет импортировать модули ESM в ваш код TS без необходимости компиляции. Не забывайте суффикс.jsпри импорте ваших модулей esm. Запустите тесты следующим образом:
npm i --save-dev @playwright/test@1.18.0-rc1 PW_EXPERIMENTAL_TS_ESM=1 npx playwright test
Создание Playwright
Команда npm init playwright теперь доступна для использования:
# Run from your project's root directory npm init playwright@latest # Or create a new project npm init playwright@latest new-project
Это создаст файл конфигурации Playwright Test, необязательно добавит примеры, рабочую среду GitHub Action и первый тестовый example.spec.ts.
Новые API и изменения
- новый
testCase.repeatEachIndexAPI -
acceptDownloadsопция теперь по умолчаниюtrue
Изменение: пользовательские опции конфигурации
Пользовательские опции конфигурации - удобный способ параметризации проектов с различными значениями. Подробнее см. в этом руководстве.
Ранее любой фикстур, введенный с помощью test.extend(), можно было переопределить в разделе конфигурации testProject.use. Например,
// WRONG: THIS SNIPPET DOES NOT WORK SINCE v1.18.
// fixtures.js
const test = base.extend({
myParameter: 'default',
});
// playwright.config.js
module.exports = {
use: {
myParameter: 'value',
},
}; Правильный способ сделать фикстуру параметризуемой в файле конфигурации - указать option: true при определении фикстуры. Например,
// CORRECT: THIS SNIPPET WORKS SINCE v1.18.
// fixtures.js
const test = base.extend({
// Fixtures marked as "option: true" will get a value specified in the config,
// or fallback to the default value.
myParameter: ['default', { option: true }],
});
// playwright.config.js
module.exports = {
use: {
myParameter: 'value',
},
}; Версии браузеров
- 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().
const locator = page.frameLocator('#my-iframe').locator('text=Submit');
await locator.click(); Подробнее читайте в нашей документации.
Обновление Визуализатора трассировки
Визуализатор трассировки Playwright теперь доступен онлайн по адресу https://trace.playwright.dev! Просто перетащите файл trace.zip , чтобы проверить его содержимое.
ПРИМЕЧАНИЕ: файлы трассировки никуда не загружаются; trace.playwright.dev - это прогрессивное веб-приложение, которое обрабатывает трассировки локально.
- Трассировки Playwright Test теперь по умолчанию включают источники (их можно отключить с помощью опции трассировки)
- Визуализатор трассировки теперь отображает имя теста
- Новая вкладка метаданных трассировки с информацией о браузере
- Снимки экрана теперь имеют адресную строку

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

Поддержка Ubuntu ARM64 + ещё
-
Playwright теперь поддерживает Ubuntu 20.04 ARM64. Теперь вы можете запускать тесты Playwright внутри Docker на Apple M1 и Raspberry Pi.
-
Теперь вы можете использовать Playwright для установки стабильной версии Edge на Linux:
npx playwright install msedge
Новые API
- Трассировка теперь поддерживает опцию
'title' - Переходы на страницы поддерживают новую опцию ожидания
'commit' - HTML отчёт получил новые параметры конфигурации
testConfig.snapshotDirопцияtestInfo.parallelIndextestInfo.titlePath-
testOptions.traceимеет новые опции -
expect.toMatchSnapshotподдерживает подкаталоги reporter.printsToStdio()
Версия 1.16
🎭 Тестирование Playwright
Тестирование API
Playwright 1.16 представляет новое тестирование API, которое позволяет отправлять запросы на сервер непосредственно из Node.js! Теперь вы можете:
- тестировать ваш API сервера
- подготавливать состояние сервера перед посещением веб-приложения в тесте
- валидировать пост-условия сервера после выполнения некоторых действий в браузере
Для отправки запроса от имени страницы Playwright используйте новый page.request API:
import { test, expect } from '@playwright/test';
test('context fetch', async ({ page }) => {
// Do a GET request on behalf of page
const response = await page.request.get('http://example.com/foo.json');
// ...
}); Для отправки автономного запроса из node.js на конечную точку API используйте новый request фикстуру:
import { test, expect } from '@playwright/test';
test('context fetch', async ({ request }) => {
// Do a GET request on behalf of page
const response = await request.get('http://example.com/foo.json');
// ...
}); Подробнее об этом читайте в нашем руководстве по тестированию API.
Перехват ответов
Теперь можно делать перехват ответов, объединив тестирование API с перехватом запросов.
Например, мы можем затемнить все изображения на странице:
import { test, expect } from '@playwright/test';
import jimp from 'jimp'; // image processing library
test('response interception', async ({ page }) => {
await page.route('**/*.jpeg', async route => {
const response = await page._request.fetch(route.request());
const image = await jimp.read(await response.body());
await image.blur(5);
await route.fulfill({
response,
body: await image.getBufferAsync('image/jpeg'),
});
});
const response = await page.goto('https://playwright.dev');
expect(response.status()).toBe(200);
}); Подробнее о перехвате ответов.
Новый HTML отчет
Попробуйте новый HTML отчёт с помощью --reporter=html или записи reporter в файле playwright.config.ts:
$ npx playwright test --reporter=html
HTML отчёт содержит всю информацию о тестах и их ошибках, включая отображение трассировок и изображений.

Подробнее о наших отчетах.
🎭 Библиотека Playwright
locator.waitFor
Подождите, пока локатор разрешится в единственный элемент с заданным состоянием. По умолчанию используется state: 'visible'.
Особенно удобно при работе со списками:
import { test, expect } from '@playwright/test';
test('context fetch', async ({ page }) => {
const completeness = page.locator('text=Success');
await completeness.waitFor();
expect(await page.screenshot()).toMatchSnapshot('screen.png');
}); Подробнее о locator.waitFor().
Поддержка Docker для Arm64
Изображение Playwright Docker теперь опубликовано для Arm64, так что его можно использовать на Apple Silicon.
Подробнее о интеграции Docker.
🎭 Визуализатор трассировки Playwright
- утверждения web-first внутри просмотра трассировки
- запустить просмотр трассировки с
npx playwright show-traceи перетащить файлы трассировки в PWA просмотра трассировки - тестирование API интегрировано с просмотром трассировки
- лучшая визуальная привязка целей действий
Узнать больше о Просмотре трассировки.
Версии браузеров
- Chromium 97.0.4666.0
- Mozilla Firefox 93.0
- WebKit 15.4
Эта версия Playwright также была протестирована на следующих стабильных каналах:
- Google Chrome 94
- Microsoft Edge 94
Версия 1.15
🎭 Библиотека Playwright
🖱️ Колесо мыши
Используя mouse.wheel() вы теперь можете прокручивать вертикально или горизонтально.
📜 Новый API заголовков
Ранее было невозможно получить несколько значений заголовков ответа. Теперь это возможно, и доступны дополнительные вспомогательные функции:
- request.allHeaders()
- request.headersArray()
- request.headerValue()
- response.allHeaders()
- response.headersArray()
- response.headerValue()
- response.headerValues()
🌈 Эмуляция forced-colors
Теперь можно эмулировать CSS медиа-функцию forced-colors, передав ее в browser.newContext() или вызвав page.emulateMedia().
Новые API
-
page.route() принимает новый
timesпараметр для указания количества совпадений с этим маршрутом. - page.setChecked() и locator.setChecked() были добавлены для установки состояния галочки.
- request.sizes() Возвращает информацию о размере ресурса для данного http запроса.
- tracing.startChunk() - Начать новую часть трассировки.
- tracing.stopChunk() - Остановить новую часть трассировки.
🎭 Тестирование Playwright
🤝 test.parallel() запуск тестов в одном файле параллельно
test.describe.parallel('group', () => {
test('runs in parallel 1', async ({ page }) => {
});
test('runs in parallel 2', async ({ page }) => {
});
}); По умолчанию тесты в одном файле выполняются последовательно. Если у вас много независимых тестов в одном файле, вы можете теперь запускать их параллельно с помощью test.describe.parallel(title, callback).
🛠 Добавить --debug флаг командной строки
Используя npx playwright test --debug вы активируете Инспектор Playwright для отладки тестов.
Версии браузеров
- Chromium 96.0.4641.0
- Mozilla Firefox 92.0
- WebKit 15.0
Версия 1.14
🎭 Библиотека Playwright
⚡️ Новый режим "strict"
Неоднозначность селекторов — распространённая проблема в автоматизированном тестировании. Режим "strict" гарантирует, что ваш селектор указывает на единственный элемент и в противном случае генерирует исключение.
Передайте strict: true в вызовы действий, чтобы включить его.
// This will throw if you have more than one button!
await page.click('button', { strict: true }); 📍 Новый API Локаторов
Локатор представляет собой представление к элементу(ам) на странице. Он сохраняет логику, достаточную для извлечения элемента в любой момент времени.
Разница между Локатором и ElementHandle заключается в том, что последний указывает на конкретный элемент, а Локатор сохраняет логику извлечения этого элемента.
Кроме того, локаторы по умолчанию работают в режиме "strict"!
const locator = page.locator('button');
await locator.click(); Подробнее см. в документации.
🧩 Экспериментальные движки селекторов для React и Vue
Селекторы React и Vue позволяют выбирать элементы по имени компонента и/или значениям свойств. Синтаксис очень похож на селекторы атрибутов и поддерживает все операторы селекторов атрибутов.
await page.locator('_react=SubmitButton[enabled=true]').click();
await page.locator('_vue=submit-button[enabled=true]').click(); Узнайте больше в документации по селекторам React и документации по селекторам Vue.
✨ Новые движки селекторов для nth и visible
-
nthдвижок селектора эквивалентен псевдоклассу:nth-match, но может быть объединён с другими движками селекторов. -
visibleдвижок селектора эквивалентен псевдоклассу:visible, но может быть объединён с другими движками селекторов.
// select the first button among all buttons
await button.click('button >> nth=0');
// or if you are using locators, you can use first(), nth() and last()
await page.locator('button').first().click();
// click a visible button
await button.click('button >> visible=true'); 🎭 Тестирование Playwright
✅ Веб-утверждения
expect теперь поддерживает множество новых веб-утверждений.
Рассмотрим следующий пример:
await expect(page.locator('.status')).toHaveText('Submitted'); Playwright Test будет повторно тестировать узел с селектором .status до тех пор, пока извлечённый узел не будет иметь текст "Submitted". Он будет повторно извлекать узел и проверять его снова и снова, пока условие не будет выполнено или пока не истечёт время ожидания. Вы можете либо передать это время ожидания, либо настроить его один раз через значение testProject.expect в конфигурации теста.
По умолчанию время ожидания для утверждений не установлено, поэтому оно будет ждать вечно, пока не истечёт время ожидания всего теста.
Список всех новых утверждений:
expect(locator).toBeChecked()expect(locator).toBeDisabled()expect(locator).toBeEditable()expect(locator).toBeEmpty()expect(locator).toBeEnabled()expect(locator).toBeFocused()expect(locator).toBeHidden()expect(locator).toBeVisible()expect(locator).toContainText(text, options?)expect(locator).toHaveAttribute(name, value)expect(locator).toHaveClass(expected)expect(locator).toHaveCount(count)expect(locator).toHaveCSS(name, value)expect(locator).toHaveId(id)expect(locator).toHaveJSProperty(name, value)expect(locator).toHaveText(expected, options)expect(page).toHaveTitle(title)expect(page).toHaveURL(url)expect(locator).toHaveValue(value)
⛓ Режим последовательного выполнения с describe.serial
Объявляет группу тестов, которые всегда должны выполняться последовательно. Если один из тестов завершится ошибкой, все последующие тесты пропускаются. Все тесты в группе повторно выполняются вместе.
test.describe.serial('group', () => {
test('runs first', async ({ page }) => { /* ... */ });
test('runs second', async ({ page }) => { /* ... */ });
}); Подробнее в документации.
🐾 API шагов с test.step
Разделите длинные тесты на несколько шагов, используя API test.step():
import { test, expect } from '@playwright/test';
test('test', async ({ page }) => {
await test.step('Log in', async () => {
// ...
});
await test.step('news feed', async () => {
// ...
});
}); Информация о шагах отображается в API отчётов.
🌎 Запуск веб-сервера перед выполнением тестов
Для запуска сервера во время тестов используйте опцию webServer в файле конфигурации. Сервер будет ожидать, пока указанный URL станет доступным перед запуском тестов, и URL будет передан Playwright как baseURL при создании контекста.
import { defineConfig } from '@playwright/test';
export default defineConfig({
webServer: {
command: 'npm run start', // command to launch
url: 'http://127.0.0.1:3000', // url to await for
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
},
}); Подробнее в документации.
Версии браузеров
- Chromium 94.0.4595.0
- Mozilla Firefox 91.0
- WebKit 15.0
Версия 1.13
Playwright Test
- ⚡️ Представляем API отчётов, который уже используется для создания отчёта Allure для Playwright.
-
⛺️ Новый
baseURLфикстура для поддержки относительных путей в тестах.
Playwright
- 🖖 Поддержка программируемого перетаскивания через API page.dragAndDrop().
-
🔎 Расширенный HAR с размерами тел для запросов и ответов. Используйте через опцию
recordHarв browser.newContext().
Инструменты
- Просмотрщик трассировок Playwright теперь отображает параметры, возвращаемые значения и
console.log()вызовы. - Инспектор Playwright может генерировать тесты Playwright Test.
Новые и переработанные руководства
- Введение
- Авторизация
- Расширения Chrome
- Аннотации Playwright Test
- Конфигурация Playwright Test
- Фикстуры Playwright Test
Версии браузеров
- 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 Test
Playwright Test — новый движок для запуска тестов, разработанный с нуля командой Playwright, специально для нужд end-to-end тестирования:
- Выполнение тестов на всех браузерах.
- Параллельное выполнение тестов.
- Изоляция контекстов и разумные значения по умолчанию.
- Запись видео, снимков экрана и других артефактов при ошибках.
- Интеграция ваших POM как расширяемых фикстур.
Установка:
npm i -D @playwright/test
Простой тестовый tests/foo.spec.ts:
import { test, expect } from '@playwright/test';
test('basic test', async ({ page }) => {
await page.goto('https://playwright.dev/');
const name = await page.innerText('.navbar__title');
expect(name).toBe('Playwright');
}); Запуск:
npx playwright test
👉 Подробнее в документации Playwright Test.
🧟♂️ Представление Просмотрщика трассировок Playwright
Просмотрщик трассировок Playwright — новый инструмент GUI, который помогает изучить записанные трассировки Playwright после выполнения сценария. С помощью трассировок Playwright можно исследовать:
- DOM страницы до и после каждого действия Playwright
- рендеринг страницы до и после каждого действия Playwright
- сетевую активность браузера во время выполнения сценария
Трассировки записываются с помощью нового API browserContext.tracing:
const browser = await chromium.launch();
const context = await browser.newContext();
// Start tracing before creating / navigating a page.
await context.tracing.start({ screenshots: true, snapshots: true });
const page = await context.newPage();
await page.goto('https://playwright.dev');
// Stop tracing and export it into a zip archive.
await context.tracing.stop({ path: 'trace.zip' }); Трассировки анализируются позже с помощью Playwright CLI:
npx playwright show-trace trace.zip
Это откроет следующее GUI:

👉 Подробнее в документации по просмотру трассировок.
Версии браузеров
- 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.on('request')
- browserContext.on('requestfailed')
- browserContext.on('requestfinished')
- browserContext.on('response')
-
tracesDirопция в browserType.launch() и browserType.launchPersistentContext() - новый пространство имён API browserContext.tracing
- новый метод download.page()
Версия 1.11
🎥 Новый видеоролик: Playwright: Новая платформа автоматизации тестов для современного веб-приложения (слайды)
- Мы поговорили о Playwright
- Показать работу команды инженеров за кулисами
- Демонстрация новых функций ✨
- Особая благодарность applitools за организацию мероприятия и приглашение!
Версии браузеров
- Chromium 92.0.4498.0
- Mozilla Firefox 89.0b6
- WebKit 14.2
Новые API
- поддержка асинхронных предикатов через 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 для 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 — новый инструмент GUI для создания и отладки ваших тестов.
- Построчная отладка ваших скриптов Playwright с помощью воспроизведения, паузы и пошагового выполнения.
- Создание новых скриптов путем записи действий пользователя.
- Генерация селекторов элементов для вашего скрипта путем наведения курсора на элементы.
- Установите переменную окружения
PWDEBUG=1для запуска Инспектора
- Пауза выполнения скрипта с помощью page.pause() в режиме с визуализацией. Приостановка страницы запускает Инспектор Playwright для отладки.
-
Новый псевдокласс has-text для селекторов CSS.
:has-text("example")соответствует любому элементу, содержащему"example"где-либо внутри, возможно, в дочернем или потомке элементе. См. дополнительные примеры. -
Диалоговые окна страницы теперь автоматически закрываются во время выполнения, если не настроен слушатель для события
dialog. Узнайте больше об этом. - Playwright для 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.
npx playwright --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 для 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
© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/release-notes