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 за допомогою ШІ та перевірено на відповідність джерелу. Точні формулювання дивіться в оригіналі. Як ми працюємо