Playwright v1.63.0 — контроль паралельності та краща observability тестів

💡 Усі статті, обговорення, новини про тестування — в одному місці. Приєднуйтесь до QA спільноти!

Вітаю. З вами Артур !

Playwright релізнув нову версію

Test Locks

Тести, які використовують спільний ресурс, тепер можуть оголошувати іменований lock. Тести з однаковим lock не виконуватимуться паралельно навіть у різних файлах, workers та projects.

Один тест може мати кілька locks-ів; test.describe() також підтримує lock.

test('reset the database', { lock: ['database', 'external-api'] }, async () => {
  // ...
});

Використовуйте lock тільки для справді shared resources: спільної БД, sandbox payment provider, global feature flags або одного test account. Не перетворюйте locks на заміну правильної ізоляції тестів — надмірна кількість locks швидко зменшить parallelism і збільшить час CI pipeline.

Пошук елементів у frame

page.frameLocator() і frame.frameLocator() тепер можна викликати без selector. Playwright шукатиме потрібний елемент у всьому дереві iframe.

await page.frameLocator().getByRole('button').click();

Якщо ж ви точно знаєте конкретний frame, краще залишити explicit selector — так тест буде зрозумілішим і менш схильним до випадкового match в іншому iframe.

Visible-only locators

Новий API locator.visible():

await page.locator('button').visible().click();

заміна для CSS :visible.

варто використовувати, коли DOM реально містить кілька однакових елементів, але активний тільки один із них. Проте якщо ви регулярно додаєте .visible() для обходу strict mode violations, спочатку перевірте, чи можна зробити locator точнішим через role, name, label або інший semantic selector.

Step params / subtitles

test.step() отримав subtitle та params. Вони доступні reporters і відображаються в Trace Viewer та HTML Report.

await test.step('Login', async () => {
  // ...
}, { subtitle: 'as admin', params: { user: 'admin' } });

Виносьте business action у test.step() і передавайте через params корисний контекст: userId, tenant, feature, orderId тощо. Не передавайте туди паролі, access tokens, API keys або інші secrets, оскільки ці дані можуть потрапити до HTML report, Trace Viewer або CI artifacts.

Trace snapshots

Tracing тепер окремо підтримує:

snapshots: {   dom: true,   aria: true,   screen: true }

Trace Viewer може показувати screenshot поруч з ARIA snapshot.

Для CI хороший варіант — зберігати розширений trace тільки при failure або retry, а не для кожного успішного тесту.

Нові API

Browser і Context

Locators

  • Нові методи locator.ariaSnapshotJSON() та page.ariaSnapshotJSON() повертають ARIA snapshot у вигляді JSON-значення замість YAML-розмітки. Також підтримуються опції mode, depth і boxes.
  • apiRequestContext.get() та інші HTTP request-методи тепер приймають generic type argument, який задає тип результату json():
const response = await request.get<User>('/api/users/42');
const user = await response.json(); // typed as User

Test runner

  • Додано окремі опції testOptions.reducedMotion, testOptions.forcedColors та testOptions.contrast.
  • Нова CLI-опція --add-reporter додає reporter до тих, що вже налаштовані в playwright.config, замість їх заміни, як це робить --reporter.
  • Нова опція omitTags для reporter-ів list, line, dot, github та junit дозволяє не додавати теги, які за замовчуванням автоматично додаються до назв тестів.

Командний рядок

  • npx playwright install --no-remove зберігає браузери, встановлені іншими інсталяціями Playwright, замість їх видалення.
  • npx playwright codegen --http-credentials дозволяє записувати тести для сторінок, захищених HTTP authentication.

Інше

  • Новий вбудований perfetto reporter записує файл у форматі Trace Event Format для Perfetto UI або chrome://tracing, відображаючи виконання тестів у вигляді timeline, де кожен worker має окрему lane.
  • HTML report тепер показує duration waterfall поруч із кроками тесту, що дозволяє бачити, скільки часу займає кожен step.

Важливо

  • Експериментальні пакети @playwright/experimental-ct-react, @playwright/experimental-ct-react17 та @playwright/experimental-ct-vue більше не оновлюватимуться. Скористайтеся інструкцією з міграції, щоб перейти на модель Stories, представлену у версії 1.62. Story ID, які передаються у fixtures.mount(), тепер можуть бути типізовані через згенерований реєстр Stories.
  • Ubuntu 20.04 більше не підтримується.
  • На Linux arm64 Playwright тепер завантажує Chromium-збірку Chrome for Testing — ту саму збірку, яка використовується на всіх інших платформах.

Браузери:

Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6

Всім гарного дня, стабільних тестів та буду радий бачити у своїй групі, щоб слідкувати за оновленнями світу розробки та тестування!

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Test Locks добре лягають ще на один кейс, який раніше лікувався тільки workers: 1 — коли частина тестів ходить у той самий персистентний профіль браузера (launch_persistent_context). Профіль лочиться на рівні файлової системи, і другий воркер не флакає, а падає ще на старті. Тепер такі тести можна звести спільним lock, а решту лишити паралельними.

також крутий сценарій! так