Skip to main content
ExodeUI

EXODEUI DESKTOP

A little space for good ideas.

Choose your platform to get the official ExodeUI installer.

Looking for Intel Mac or other builds? Explore the web studio or check all download options.

Prefer the browser? Try for free in your browser →
Підручник · Тестування7 хвилин читання·Updated жовтень 2026 р·Команда ExodeUI

Тестування станів інтерфейсу користувача та анімації за допомогою Playwright

Як написати стабільні тести для анімованого інтерфейсу користувача за допомогою Playwright: контроль часу за допомогою page.clock, емуляція зменшеного руху та темного режиму та знімки екрана з вимкненою анімацією.

Пряме резюме та визначення

Основний винос

Зробіть тести анімації детермінованими: контролюйте час за допомогою page.clock, який охоплює таймери, requestAnimationFrame та продуктивність; емулювати налаштування користувача за допомогою page.emulateMedia({reducedMotion, colorScheme}); стверджувати про стани, а не проміжні пікселі анімації; і робити знімки екрана з вимкненою анімацією. Перевірте траєкторію зменшеного руху як першокласний випадок.

Чому тести анімації нестабільні

Анімація залежить від часу, а реальний час залежить від запусків і машин. Знімок екрана, зроблений на 10 мілісекунд раніше чи пізніше, показує інший кадр. Виправлення полягає в тому, щоб контролювати час і налаштування, а також перевіряти переміщення анімації станів між кадрами, а не окремими.

Чотири кроки: встановлення стану, контроль часу за допомогою page.clock, емуляція налаштувань, таких як зменшення руху, підтвердження за допомогою перевірок DOM і знімків екрана
Фіксований час і фіксовані налаштування роблять анімований інтерфейс користувача придатним для тестування.

Контрольний час

API годинника Playwright дозволяє тесту встановити підроблений годинник, а потім призупинити, перемотати вперед або запустити час на встановлений час. Він охоплює setTimeout, setInterval, requestAnimationFrame та продуктивність, тому ви можете, наприклад, перемотати вперед після затримки завантаження та перевірити, чи з’явився стан успішного виконання.

Емуляція налаштувань користувача

page.emulateMedia() може встановити дляreducedMotion значення «зменшити», а для colorScheme значення «темний» або «світлий». Запустіть ключові потоки зі зниженим рухом, щоб підтвердити, що нічого важливого не залежить від анімації, і в обох темах, щоб виявити проблеми з контрастом.

Стабільні скріншоти

Playwright Test може порівнювати скріншоти за допомогою expect(page).toHaveScreenshot(), а параметри скріншотів включають анімацію: «вимкнено», що зупиняє анімацію CSS і переходи для захоплення. Використовуйте візуальні порівняння для кінцевих станів і DOM або твердження про доступність для поведінки.

Тестування компонентів на основі canvas

Анімація Canvas, наприклад, намальована середовищами виконання Lottie, Rive або ExodeUI, не відображається в DOM. Тестуйте вхідні дані, які надсилає ваш код, і події, які він отримує, зберігайте реальні доступні елементи поряд із полотном і використовуйте знімки екрана для візуальної перевірки після контролю часу.

Фрагмент впровадження виробництва

Реалізація інтерактивного компонента
import { test, expect } from '@playwright/test';

test('save button shows success, also with reduced motion', async ({ page }) => {
  await page.clock.install();                         // fake timers + rAF
  await page.emulateMedia({ reducedMotion: 'reduce' }); // test the calm path
  await page.goto('/settings');

  await page.getByRole('button', { name: 'Save' }).click();
  await expect(page.getByRole('status')).toHaveText('Saving…');

  await page.clock.runFor(2000);                      // skip the wait deterministically
  await expect(page.getByRole('status')).toHaveText('Saved');

  await expect(page).toHaveScreenshot('saved.png', { animations: 'disabled' });
});

Ключі Principle, які слід запам’ятати

  • Керуйте часом за допомогою page.clock (таймери, requestAnimationFrame, продуктивність)
  • Емулюйте reduceMotion і colorScheme за допомогою page.emulateMedia
  • Стверджуйте про стани та доступний текст, а не проміжні пікселі анімації
  • Скріншот з анімацією: "вимкнено"
  • Перевірте траєкторію зменшеного руху як першокласний випадок

Часті запитання

Джерела

  1. Clock — Playwright документи
  2. Page.emulateMedia and screenshot options — Playwright документи
  3. Visual comparisons — Playwright документи

Відповідні посібники та приклади

Компоненти, побудовані навколо тестованих станів

Компоненти ExodeUI керуються іменованими входами, завдяки чому їх стани легко перевірити за допомогою коду.

Прочитайте посібник React
Спробуйте безкоштовно