Вышел Playwright 1.65: поддержка Bun, отчёты только с ошибками и изменения в запуске тестов

5 ноября вышел Playwright 1.65. В новой версии добавили возможность запускать тесты через Bun, упростили отчёты об ошибках и реализовали механизм для выполнения отдельных тестов без параллельной нагрузки. Есть и изменения, которые могут повлиять на существующие проекты, особенно на тесты с TypeScript.

Разбираемся, что нового и на что стоит обратить внимание перед обновлением.

Тесты теперь можно запускать через Bun

Playwright Test получил поддержку запуска через Bun. В этом режиме Bun самостоятельно преобразует TypeScript в JavaScript, поэтому Playwright не использует Babel и его кеш компиляции.

Для запуска нужна команда:

bunx --bun playwright test

Здесь важен флаг --bun: без него команда bunx playwright test по-прежнему запускает тесты через Node.js.

Разработчики проверяют работу тестового раннера с Bun 1.4.3 на Linux. При этом пока есть несколько ограничений:

  • Нет режима отслеживания изменений файлов. UI-режим не перезапускает тесты автоматически, а --only-changed не отслеживает зависимости через импорты.

  • Параметр --tsconfig и настройки JSX в tsconfig.json не влияют на запуск. Пользовательские загрузчики ESM также не поддерживаются.

  • В стеке вызовов отсутствуют асинхронные кадры, а названия API выводятся без имени класса: например, click вместо locator.click. Это влияет на сообщения об ошибках и отображение шагов.

  • Вывод тестов в консоль не попадает в трассировку и UI-режим.

То есть использовать Bun уже можно, но при переходе стоит проверить, не зависят ли ваши тесты от этих возможностей.

Отчёты только с ошибками

В Playwright 1.65 появился новый формат вывода failures. Он показывает ошибки и успешные повторные попытки по мере выполнения тестов, а в конце выводит сводку. Сообщения о ходе выполнения каждого теста при этом не отображаются.

Запустить его можно так:

npx playwright test --reporter=failures

Кроме того, для отчётов HTML, JSON и JUnit добавили параметр onlyFailures.

С ним в отчёт попадают тесты с неожиданными результатами, включая неожиданные успешные прохождения, нестабильные и прерванные тесты. Если тест сначала упал, а затем прошёл при повторном запуске, информация обо всех попытках сохранится.

Пример настройки в playwright.config.ts:

import { defineConfig } from '@playwright/test';export default defineConfig({ reporter: [ ['failures'], ['html', { onlyFailures: true }], ],});

Это пригодится на CI, особенно в проектах с большим количеством тестов: проще сосредоточиться на проблемных сценариях, не просматривая результаты всех успешных проверок.

Отдельные тесты можно выполнять без параллельной нагрузки

В тестовом раннере появилась встроенная блокировка -exclusive-. Она позволяет выполнить конкретный тест в момент, когда никакие другие тесты не запущены.

Например:

test('restart the server', { lock: '-exclusive-' }, async () => { // Перезапуск сервера});

Перед началом такого теста Playwright дожидается завершения остальных. Пока он выполняется, новые тесты не запускаются. После завершения обычное параллельное выполнение возобновляется.

Механизм полезен для сценариев, которые затрагивают общие ресурсы: например, перезапуска сервера или измерения производительности, когда параллельная активность может повлиять на результат.

При этом остальные тесты не нужно переводить в последовательный режим.

Другие изменения в тестовом раннере и API

В обновлении есть несколько небольших, но полезных дополнений.

Методы test.skip(), test.fixme(), test.fail() и test.slow() теперь позволяют передавать только описание причины. Оно сохраняется в аннотации теста.

Например:

test('upload a file', async ({ page }) => { test.skip('Not implemented yet');});

Также появилась переменная окружения PLAYWRIGHT_TRANSFORM_CACHE_DIR, с помощью которой можно задать каталог для кеша преобразованных тестовых файлов. Это может пригодиться, например, при работе нескольких пользователей на одной Linux-машине.

В API добавили:

  • Параметры timeout и signal для cdpSession.send(), позволяющие задавать время ожидания и управлять отменой операции.

  • Метод testRun.mode(), возвращающий режим выполнения набора тестов при вызове reporter.preprocess().

Что может сломаться после обновления

В Playwright 1.65 есть несколько изменений поведения, которые стоит учитывать при переходе с предыдущих версий.

Инициализация полей классов TypeScript. Теперь Playwright учитывает параметр useDefineForClassFields из tsconfig.json так же, как компилятор TypeScript. По умолчанию он включён для ES2022 и более новых целей компиляции, а также если target не задан.

Из-за этого может перестать работать код, где поле класса инициализируется через свойство, объявленное в параметрах конструктора:

class LoginPage { readonly submit = this.page.getByRole('button', { name: 'Submit' }); constructor(private readonly page: Page) {}}

Причина в том, что инициализация поля выполняется до присваивания свойства page. В результате возникает TypeError.

Исправить можно переносом инициализации в конструктор или установкой "useDefineForClassFields": false в tsconfig.json.

Проверка интерактивности элементов. Методы locator.click(), locator.check(), locator.tap(), locator.fill(), locator.clear() и locator.selectOption() теперь ожидают, пока элемент перестанет быть inert.

Если атрибут inert установлен на самом элементе или его родительском контейнере и состояние не меняется, операция завершится по тайм-ауту.

Разделение тестов на части. Если при запуске с разделением на шарды тесты не найдены ни в одном шарде, Playwright теперь завершает выполнение с ошибкой No tests found. Чтобы разрешить такой результат, можно использовать --pass-with-no-tests. При этом отдельный пустой шард не считается ошибкой, если в остальных есть тесты.

Обработка cookie. Сопоставление cookie с URL теперь соответствует RFC 6265. В частности, учитываются точные правила для доменов и путей: cookie, заданные только для конкретного хоста, больше не возвращаются для его поддоменов, а Path=/api не совпадает с /apiv2. Также скорректирована обработка cookie без имени.

Авторизация через прокси. Учётные данные из параметра proxy теперь используются только для авторизации на прокси-сервере и не передаются целевым сайтам. Для HTTP-аутентификации на сайте нужно использовать httpCredentials.

Проверки доступности. Текст, который браузер не отображает, больше не учитывается при формировании доступных имён элементов и снимков ARIA. Например, это касается текста внутри закрытого

или текста, не назначенного ни одному слоту. Из-за этого могут измениться результаты page.getByRole(), locator.ariaSnapshot() и expect(locator).toMatchAriaSnapshot().

Есть и несколько менее заметных изменений:

  • Строковые значения и URLSearchParams в параметре params у APIRequestContext теперь дополняют существующую строку запроса URL, а не заменяют её.

  • Импорты .css, .less и .scss в тестах загружаются как пустые модули вместо удаления импортов. При этом файлы должны существовать.

  • Формирователь отчётов blob снова очищает выходной каталог перед записью.

  • Для импортированных вызовов test() в CommonJS изменилось определение позиции в исходном файле: теперь она указывает на начало вызываемого выражения, как в ESM.

Поддерживаемые версии Node.js и браузеров

Playwright больше не тестируется на Node.js 20. Разработчики рекомендуют использовать Node.js 22, 24 или 26.

В официальных Docker-образах Node.js 24 заменили на Node.js 26. Также обновили Chromium до последней патч-версии соответствующей ветки.

В Playwright 1.65 используются следующие версии браузеров:

  • Chromium 158.0.8127.18

  • Firefox 159.0

  • WebKit 27.2

Дополнительно релиз проверен со стабильными версиями Google Chrome 157 и Microsoft Edge 156.

В целом обновление сосредоточено на запуске тестов и работе с их результатами. Поддержка Bun расширяет выбор среды выполнения, новые настройки отчётов упрощают разбор ошибок, а эксклюзивная блокировка помогает работать с тестами, чувствительными к параллельной нагрузке.

Перед обновлением стоит в первую очередь проверить конфигурацию TypeScript, работу с cookie и прокси, а также тесты, завязанные на доступные имена элементов.

Если запускаете автотесты в GitLab CI/CD, приходите 26 ноября в 20:00 на бесплатный демо-урок Otus — разберём, как настроить GitLab Runner, избежать типичных ошибок и обеспечить стабильную работу пайплайнов. Записаться

Больше вебинаров по тестированию, инфраструктуре, разработке и не только смотрите в календаре мероприятий.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев