/** * Sprint 16 — visual regression helper. * * Подготавливает одинаковый кеш + локаль для всех snapshot-тестов. * Маскирует «гуляющие» области (badges с временем, live-clock, тут * стоит расти со временем). * * `applyTheme(page, 'dark')` — переключает тему через localStorage и * reload. Sprint 14 ввёл lazy-chunk'и, страница может «доезжать» * после loadstate=networkidle (тёмная вспышка через 50мс при первом * рендере dashboard'a) — добавляем page.waitForTimeout(300). */ import type { Page } from '@playwright/test' export async function applyTheme(page: Page, theme: 'light' | 'dark'): Promise { await page.evaluate((t) => localStorage.setItem('fm.theme', t), theme) await page.reload({ waitUntil: 'networkidle' }) // Дать React закончить mount lazy-чанков (Recharts, DashboardWidgets). await page.waitForTimeout(300) } /** Стандартные маски для всех страниц: live-clock, текущая дата в title * страницы, аватар с инициалами от случайного email'а (digits меняются от * прогона к прогону). Локаторы — `.text-slate-500` это часто * «timestamp»-подписи; маска без выбора нужного фрагмента слишком грубая, * лучше маскировать только конкретный CSS-селектор. */ export const TIMESTAMP_MASK_SELECTORS: string[] = [ '[data-live-clock]', // компонент Wifi/WifiOff в sidebar показывает текущее время '[data-user-initials]', // аватар инициалов (зависит от email) '.dashboard-stat-delta', // KPI delta — текущая дата ]