Voydevich
Playwright

Що нового в Playwright 1.64

У релізі Playwright 1.64 з'явилися підтримка WebMCP, метод locator.within(), оновлений запис відео та низка покращень для тест-ранера.

Реліз від 7 жовтня 2026 · оновлено 9 листопада 2026

Головне

  • Підтримка експериментального браузерного WebMCP API через page.webmcp та frame.webmcp
  • Новий метод locator.within() для комбінування локаторів та відносного пошуку
  • Покращений запис відео: налаштування fps, кодек VP9 та стилізація дій через CSS
  • Нові можливості тест-ранера: прапорець --shuffle, параметр default для проєктів і блокування тестів
  • Ламаючі зміни у поведінці видимості iframe, передачі screen та компіляції JSX

Коротко

У Playwright 1.64 додано роботу з експериментальним браузерним WebMCP API через page.webmcp та frame.webmcp, а також новий метод locator.within() для зручного комбінування локаторів. Оновлення містить масштабні покращення запису відео, включно з підтримкою кодека VP9 і можливістю вказувати частоту кадрів (fps), та нові функції тест-ранера, такі як запуск тестів у випадковому порядку за допомогою --shuffle. Окрім цього, реліз містить кілька ламаючих змін, які стосуються видимості елементів у прихованих iframe, емуляції screen та компіляції JSX у тестах.

Нові можливості

Підтримка WebMCP

Нові об'єкти page.webmcp та frame.webmcp надають доступ до інструментів, які сторінка реєструє за допомогою експериментального браузерного API WebMCP. Це дозволяє тестувати їх безпосередньо у коді:

const browser = await chromium.launch({ args: ['--enable-features=WebMCP'] });
const page = await browser.newPage();
await page.goto('https://example.com');

for (const tool of await page.webmcp.tools())
  console.log(tool.name, tool.description);

const result = await page.webmcp.callTool('add', { a: 2, b: 40 });
console.log(result.content[0].text); // "42"

Playwright MCP підтримує WebMCP за замовчуванням: інструменти, визначені сторінкою, передаються агенту у форматі webmcp_<tool>. Для вимкнення передбачено прапорець --no-webmcp. Інструменти також доступні у playwright-cli через команди webmcp-list та webmcp-call.

Оновлення запису відео

  • Відео тепер записуються з використанням кодека VP9 замість VP8, що зменшує навантаження на процесор і створює файли меншого розміру за однакової або кращої якості.
  • Нова опція fps у testOptions.video, recordVideo та screencast.start() дозволяє налаштовувати частоту кадрів. У Firefox та WebKit запис наразі підтримує до 25 кадрів на секунду.
  • Новий параметр style приймає CSS-оголошення для маркера point, підсвічування цілі highlight та заголовка дії title. Ця опція замінює застарілий параметр fontSize.
  • Курсор залишається видимим у точці останньої дії, зберігається між переходами по сторінках і рухається плавною траєкторією.
  • Усі нові опції відео також доступні в Playwright MCP та playwright-cli.

Комбінування локаторів за допомогою locator.within()

Метод locator.within() об'єднує два наявні локатори у природному порядку читання. Відносні локатори на зразок locator.nth() або locator.first() обчислюються всередині кожного батьківського елемента окремо:

const saveButton = page.getByRole('button', { name: 'Save' });
const dialog = page.getByTestId('settings-dialog');
await saveButton.within(dialog).click();

// Третя клітинка кожного рядка, а не третя клітинка у всій таблиці:
const thirdColumn = page.getByRole('cell').nth(2).within(page.getByRole('row'));
await expect(thirdColumn).toHaveText(['Apple', 'Banana', 'Cherry']);

Тест-ранер

  • Опція testProject.default дозволяє зберігати проєкт у конфігурації без його запуску за замовчуванням. Проєкти зі значенням default: false можна запустити за допомогою --project=<name> або --project="*".
  • Прапорець командного рядка --shuffle запускає тести у випадковому порядку. Для відтворення порядку можна передати seed, наприклад: npx playwright test --shuffle 271828182.
  • Опція lock у test.describe.configure() додає блокування до всіх тестів у файлі або групі: test.describe.configure({ lock: 'user-settings' }).
  • Параметр type: 'webp' для toHaveScreenshot у testConfig.expect дозволяє зберігати всі скриншоти без явної назви у форматі WebP.

Нові API

  • page.getByRef() знаходить елемент за його aria ref (наприклад, e2), що генерується викликом page.ariaSnapshot() у режимі 'ai'.
  • Опція includeShadow у page.content() та frame.content() серіалізує відкриті shadow roots як declarative shadow DOM.
  • Опція signCount задає початковий лічильник підписів для віртуальних облікових даних. Методи credentials.create() та credentials.get() повертають поточний signCount, і він зберігається та відновлюється разом із даними у storage state.
  • Властивість fullConfig.filteredProjects містить список проєктів, обраних для запуску після застосування фільтра --project. Вона доступна у global setup та репортерах.
  • Методи apiRequestContext.addCookies(), apiRequestContext.cookies() та apiRequestContext.clearCookies() реалізують керування куками контексту запитів аналогічно до BrowserContext.

Ламаючі зміни

  • Властивість screen з дескрипторів пристроїв: Значення screen тепер передається з дескрипторів (наприклад, devices['Desktop Chrome']). Через це window.screen та media queries бачать емульований розмір екрана. Щоб відмовитися від цієї поведінки, потрібно явно вказати screen: undefined у конфігурації.
  • Компіляція JSX за tsconfig.json: JSX у тестових файлах тепер компілюється відповідно до опцій jsx, jsxFactory, jsxFragmentFactory та jsxImportSource з tsconfig.json, а за замовчуванням використовується автоматичний рантайм react/jsx-runtime.
  • Поведінка --update-snapshots=missing: Якщо використовується режим 'missing' для testConfig.updateSnapshots, тести, які лише створюють відсутні знімки, тепер проходять успішно (pass). Стандартний режим без прапорця перейменовано на 'default': за нього відсутні знімки записуються, а тест падає.
  • Видимість елементів у прихованих iframe: Елементи всередині невидимого iframe (наприклад, зі стилем visibility: hidden) тепер вважаються прихованими для дій, виклику locator.isVisible() та перевірки expect(locator).toBeVisible().

Виправлення та покращення

  • Оновлено версії браузерів: Chromium 156.0.8078.4, Mozilla Firefox 157.0 та WebKit 27.2. Реліз також протестовано зі стабільними каналами Google Chrome 155 та Microsoft Edge 155.
  • У версії 1.64.1 виправлено помилку #43247, через яку _electron.launch періодично втрачав перше вікно зібраного застосунку.
  • У версії 1.64.1 виправлено регресію #43242, коли в Chromium 155+ переривався preflighted cross-origin редирект (net::ERR_ABORTED) за наявності будь-якого зареєстрованого роуту.

Огляд підготовлено автоматично за офіційними release notes за допомогою ШІ та перевірено на відповідність джерелу. Точні формулювання дивіться в оригіналі. Як ми працюємо