visual-stability.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import type { Page, TestInfo } from "@playwright/test"
  2. import { analyzeVisualObservations, analyzeVisualTraceByMarker } from "./visual-stability/analyzer"
  3. import { legacyVisualPlan, type LegacyVisualStabilityOptions } from "./visual-stability/invariant"
  4. import type { CapturedFrame, VisualStabilityTrace } from "./visual-stability/model"
  5. import { markVisualProbe, startVisualProbe, stopVisualProbe } from "./visual-stability/probe"
  6. import type { VisualRegionDefinition } from "./visual-stability/regions"
  7. import { reportVisualStability } from "./visual-stability/reporter"
  8. export * from "./visual-stability/index"
  9. const capturedFrames = Symbol("capturedFrames")
  10. export async function startVisualStabilityProbe(page: Page, regions: Record<string, VisualRegionDefinition>) {
  11. await startVisualProbe(page, regions)
  12. }
  13. export async function stopVisualStabilityProbe(page: Page) {
  14. const result = await stopVisualProbe(page)
  15. const trace: VisualStabilityTrace = { markers: result.markers, samples: result.samples }
  16. Object.defineProperty(trace, capturedFrames, { value: result.frames })
  17. return trace
  18. }
  19. export async function markVisualStability(page: Page, label: string) {
  20. await markVisualProbe(page, label)
  21. }
  22. export function analyzeVisualStability(trace: VisualStabilityTrace, options: LegacyVisualStabilityOptions = {}) {
  23. return analyzeVisualObservations(trace.samples, legacyVisualPlan(options))
  24. }
  25. export function analyzeVisualStabilityByMarker(
  26. trace: VisualStabilityTrace,
  27. options: LegacyVisualStabilityOptions = {},
  28. ) {
  29. return analyzeVisualTraceByMarker(trace, legacyVisualPlan(options))
  30. }
  31. export async function expectVisualStability(
  32. testInfo: TestInfo,
  33. name: string,
  34. trace: VisualStabilityTrace,
  35. options: LegacyVisualStabilityOptions = {},
  36. ) {
  37. await reportVisualStability(
  38. testInfo,
  39. name,
  40. {
  41. ...trace,
  42. frames: (trace as VisualStabilityTrace & { [capturedFrames]?: CapturedFrame[] })[capturedFrames] ?? [],
  43. },
  44. legacyVisualPlan(options),
  45. )
  46. }