/** * QA360 Screenshot Helper Module * * P0: Screenshot capture and comparison helpers * - Full page and element screenshots * - Baseline comparison with PixelDiff * - Automatic retry on failure * - Multiple format support (PNG, JPEG) */ import type { Page, Locator } from '@playwright/test'; import { type PixelDiffResult, type PixelDiffOptions } from './pixel-diff.js'; /** * Screenshot capture options */ export interface ScreenshotCaptureOptions { /** Save path for the screenshot */ path?: string; /** Whether to capture full page (default: false) */ fullPage?: boolean; /** Image format (default: png) */ type?: 'png' | 'jpeg'; /** JPEG quality (0-100, default: 80) */ quality?: number; /** Maximum retry attempts (default: 1) */ maxRetries?: number; /** Delay before capture in ms (default: 0) */ delay?: number; /** Whether to hide scrollbars (default: false) */ hideScrollbars?: boolean; /** Whether to mask sensitive elements */ mask?: Array<{ selector: string; color?: string; }>; /** Whether to update baseline instead of comparing */ update?: boolean; } /** * Screenshot comparison result */ export interface ScreenshotCompareResult { /** Whether screenshots match */ matches: boolean; /** Pixel diff result (if comparison performed) */ diff?: PixelDiffResult; /** Path to actual screenshot */ actualPath: string; /** Path to baseline screenshot */ baselinePath: string; /** Path to diff image (if generated) */ diffPath?: string; /** Number of retry attempts */ attempts: number; } /** * Screenshot baseline configuration */ export interface BaselineConfig { /** Base directory for baseline images */ baselineDir: string; /** Directory for actual images (during test) */ actualDir: string; /** Directory for diff images */ diffDir?: string; /** Whether to update baselines */ update?: boolean; } /** * Screenshot Helper */ export declare class Screenshot { private page; private defaults; constructor(page: Page, defaults?: ScreenshotCaptureOptions); /** * Take a screenshot of the current page */ take(options?: ScreenshotCaptureOptions): Promise; /** * Take a screenshot of a specific element */ takeElement(locator: Locator, options?: ScreenshotCaptureOptions): Promise; /** * Take screenshot with retry on failure */ takeWithRetry(options?: ScreenshotCaptureOptions): Promise; /** * Compare screenshot with baseline */ compare(baselinePath: string, options?: ScreenshotCaptureOptions & { diffOptions?: PixelDiffOptions; }): Promise; /** * Compare element screenshot with baseline */ compareElement(locator: Locator, baselinePath: string, options?: ScreenshotCaptureOptions & { diffOptions?: PixelDiffOptions; }): Promise; /** * Create a full page screenshot with automatic scrolling for very long pages */ takeFullPageStitched(options?: ScreenshotCaptureOptions): Promise; /** * Take screenshot at multiple viewport sizes (responsive testing) */ takeResponsive(sizes: Array<{ width: number; height: number; name?: string; }>, options?: ScreenshotCaptureOptions): Promise>; /** * Apply visual masks to sensitive elements */ private applyMasks; /** * Sleep utility for delays */ private sleep; } /** * Convenience function to create screenshot helper */ export declare function screenshot(page: Page, options?: ScreenshotCaptureOptions): Screenshot;