Voydevich
Playwright

Що нового в Playwright 1.65

У релізі Playwright 1.65 з'явилася підтримка запуску тестів через Bun, новий репортер failures та блокування -exclusive-.

Реліз від 5 листопада 2026 · оновлено 8 листопада 2026

Головне

  • Підтримка запуску тест-раннера під Bun через прапорець --bun
  • Новий репортер failures та опція onlyFailures для HTML, JSON і JUnit
  • Вбудоване блокування тестів -exclusive- для ізольованого виконання
  • Дії над елементами тепер очікують зняття атрибута inert
  • Припинення тестування на Node.js 20 та оновлення Docker-образів до Node.js 26

Коротко

Playwright 1.65 додає можливість запускати тест-раннер під Bun без використання Babel і кешу компіляції. У релізі також з'явилися новий репортер failures та опція onlyFailures для фільтрації звітів, а також ексклюзивне блокування тестів -exclusive-. Окрім цього, версія містить низку ламаючих змін у поводженні з useDefineForClassFields, роботі з inert-елементами, обробці кукі згідно з RFC 6265 та припинення тестування на Node.js 20.

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

Запуск тестів під Bun

Тест-раннер тепер може виконуватися під Bun. Оскільки Bun самостійно транспілює файли тестів на TypeScript, Playwright не застосовує Babel або власний кеш компіляції. Для запуску необхідно передавати прапорець --bun (без нього команда виконується на Node.js):

bunx --bun playwright test

Під час роботи під Bun діють певні відмінності:

  • Відсутній watch mode: UI mode не перезапускає тести під час зміни файлів, а прапорець --only-changed не відстежує імпорти.
  • Bun завантажує модулі самостійно, тому параметр --tsconfig та опції JSX у tsconfig.json не діють, а кастомні ESM-завантажувачі не підтримуються.
  • Стек-трейси не містять асинхронних фреймів, а назви API не мають назви класу (наприклад, click замість locator.click), що змінює розташування деяких кроків, їхні назви та повідомлення про помилки.
  • Вивід консолі тесту не потрапляє до трейсів і UI mode.

Звіти тільки з помилками

  • Додано новий репортер failures, який виводить інформацію про збої та успішні повторні спроби одразу в міру їх виникнення, після чого показує підсумок без відображення процесу виконання.
  • Для репортерів HTML, JSON та JUnit додано опцію onlyFailures. Вона зберігає у звіті лише тести з неочікуваними результатами, flaky-тести та перервані тести:
// playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
  reporter: [
    ['failures'],
    ['html', { onlyFailures: true }],
  ],
});

Тест-раннер

  • Блокування -exclusive-: вбудований тестовий замок { lock: '-exclusive-' } дозволяє запускати обраний тест лише тоді, коли жодні інші тести не виконуються. Усі інші тести продовжують запускатися паралельно між собою.
  • Опис у статусах тестів: методи test.skip(), test.fixme(), test.fail() та test.slow() тепер приймають виключно опис, який записується в анотацію тесту.
  • Змінна середовища PLAYWRIGHT_TRANSFORM_CACHE_DIR: дозволяє встановити окрему директорію для транспільованих файлів тестів (наприклад, для спільного середовища кількох користувачів на машині з Linux).

Нові API

  • У методі cdpSession.send() з'явилися опції timeout і signal.
  • Метод testRun.mode() повертає режим виконання тестового набору під час роботи reporter.preprocess().

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

  • Ініціалізація полів класів TypeScript: поля класів тепер наслідують значення useDefineForClassFields з вашого tsconfig.json аналогічно до tsc (параметр увімкнено для ES2022 і новіших цілей, а також коли target не вказано). Ініціалізація поля, яка звертається до параметрів конструктора, тепер завершується помилкою через інший порядок виконання. Необхідно перенести ініціалізацію в конструктор або виставити "useDefineForClassFields": false.
  • Очікування для inert-елементів: дії locator.click(), locator.check(), locator.tap(), locator.fill(), locator.clear() та locator.selectOption() тепер чекають, поки елемент перестане бути inert. Дія над елементом із цим атрибутом або всередині нього завершується таймаутом, якщо стан не змінюється.
  • Поведінка шардингу без тестів: виконання шарду тепер падає з помилкою «No tests found», якщо жоден тест не знайдено по всіх шардах. Щоб дозволити таку поведінку, додано прапорець --pass-with-no-tests. Якщо інші шарди мають тести, порожній шард проходить успішно.
  • Кукі за RFC 6265: browserContext.cookies() та apiRequestContext.cookies() при передачі URL більше не повертають host-only кукі для піддоменів або кукі з Path=/api для шляху /apiv2, а кукі з Path=/foo/ не підходять для /foo. APIRequestContext відправляє безіменну куку як Cookie: x (раніше Cookie: =x) і записує Set-Cookie: token як куку без імені.
  • Автентифікація через проксі: облікові дані з опції proxy тепер застосовуються виключно для авторизації на проксі й більше не надсилаються вебсайтам. Для автентифікації на сайтах потрібно використовувати httpCredentials.
  • Розрахунок доступних імен та aria snapshots: текст, який не відмальовується браузером (наприклад, не призначений у slot або розташований безпосередньо у закритому <details>), більше не включається до accessible names та aria snapshots. Це впливає на page.getByRole() з параметром імені, locator.ariaSnapshot() та expect(locator).toMatchAriaSnapshot().
  • Параметри запитів в APIRequestContext: значення params у вигляді рядка або URLSearchParams тепер додаються до існуючого query у URL, а не замінюють його.
  • Імпорти стилів у тестах: файли .css, .less та .scss у тестах тепер завантажуються як порожні модулі, а не вирізаються з коду, тому імпортований файл обов'язково має існувати у системі.
  • Очищення репортера blob: репортер blob знову видаляє весь вміст своєї вихідної директорії перед записом звіту.
  • Розташування викликів CommonJS: координати викликів на зразок test( у CommonJS-виводі тепер вказують на початок функції (наприклад, a.spec.ts:3:7 замість a.spec.ts:3:11), як і в ESM.

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

  • Playwright більше не тестується на Node.js 20. Системні вимоги передбачають використання Node.js версій 22, 24 або 26.
  • Офіційні Docker-образи оновлено: вони містять Node.js 26 замість Node.js 24, а також свіжий патч Chromium тієї ж гілки.
  • Оновлено версії браузерів: Chromium 158.0.8127.18, Mozilla Firefox 159.0, WebKit 27.2.
  • Проведено тестування зі стабільними каналами Google Chrome 157 та Microsoft Edge 156.

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