diff --git a/test-framework/shared/types/accessibility.types.ts b/test-framework/shared/types/accessibility.types.ts new file mode 100644 index 0000000..880b1e9 --- /dev/null +++ b/test-framework/shared/types/accessibility.types.ts @@ -0,0 +1,24 @@ +export interface AccessibilityResult { + score: number; + violations: Violation[]; + passes: number; + incomplete: number; + page: string; + url: string; +} + +export interface Violation { + id: string; + impact: string; + description: string; + help: string; + helpUrl: string; + nodes: number; +} + +export interface WCAGCompliance { + level: 'A' | 'AA' | 'AAA'; + passed: number; + failed: number; + total: number; +} diff --git a/test-framework/shared/types/index.ts b/test-framework/shared/types/index.ts new file mode 100644 index 0000000..5247983 --- /dev/null +++ b/test-framework/shared/types/index.ts @@ -0,0 +1,5 @@ +export * from './page.types'; +export * from './test.types'; +export * from './performance.types'; +export * from './accessibility.types'; +export * from './seo.types'; diff --git a/test-framework/shared/types/page.types.ts b/test-framework/shared/types/page.types.ts new file mode 100644 index 0000000..f7e17cd --- /dev/null +++ b/test-framework/shared/types/page.types.ts @@ -0,0 +1,20 @@ +import { Page, Locator } from '@playwright/test'; + +export interface PageConfig { + name: string; + url: string; + selectors: { + title: string; + [key: string]: string; + }; +} + +export interface PageSelectors { + [key: string]: string; +} + +export interface NavigationItem { + name: string; + url: string; + selector: string; +} diff --git a/test-framework/shared/types/performance.types.ts b/test-framework/shared/types/performance.types.ts new file mode 100644 index 0000000..afd1628 --- /dev/null +++ b/test-framework/shared/types/performance.types.ts @@ -0,0 +1,36 @@ +export interface PerformanceMetrics { + loadTime: number; + domContentLoaded: number; + firstPaint: number; + firstContentfulPaint: number; +} + +export interface CoreWebVitals { + largestContentfulPaint: number; + firstInputDelay: number; + cumulativeLayoutShift: number; +} + +export interface ResourceTiming { + name: string; + duration: number; + size: number; + type: string; +} + +export interface NetworkTiming { + dns: number; + tcp: number; + ssl: number; + request: number; + response: number; + total: number; +} + +export interface LighthouseResult { + performance: number; + accessibility: number; + bestPractices: number; + seo: number; + pwa: number; +} diff --git a/test-framework/shared/types/seo.types.ts b/test-framework/shared/types/seo.types.ts new file mode 100644 index 0000000..ad0a71d --- /dev/null +++ b/test-framework/shared/types/seo.types.ts @@ -0,0 +1,35 @@ +export interface SEOResult { + score: number; + metaTags: MetaTagResult; + headings: HeadingResult; + links: LinkResult; + images: ImageResult; +} + +export interface MetaTagResult { + title: boolean; + description: boolean; + keywords: boolean; + ogTitle: boolean; + ogDescription: boolean; + canonical: boolean; +} + +export interface HeadingResult { + hasH1: boolean; + headingStructure: boolean; + multipleH1: boolean; +} + +export interface LinkResult { + total: number; + broken: number; + internal: number; + external: number; +} + +export interface ImageResult { + total: number; + withAlt: number; + withoutAlt: number; +} diff --git a/test-framework/shared/types/test.types.ts b/test-framework/shared/types/test.types.ts new file mode 100644 index 0000000..42f56fe --- /dev/null +++ b/test-framework/shared/types/test.types.ts @@ -0,0 +1,27 @@ +export interface TestConfig { + baseURL: string; + timeout: number; + retries: number; + environment: string; + headless: boolean; + slowMo?: number; +} + +export interface TestResult { + name: string; + status: 'passed' | 'failed' | 'skipped'; + duration: number; + errors?: Error[]; +} + +export interface TestSuite { + name: string; + tests: TestResult[]; + summary: { + total: number; + passed: number; + failed: number; + skipped: number; + duration: number; + }; +}