# WCAG-ADA Accessibility Scanner A high-performance accessibility scanner built with Playwright and axe-core for WCAG compliance testing. ## Features - 🚀 Fast scanning with Playwright - ♿ WCAG 2.0, 2.1, and 2.2 compliance testing - 📊 Detailed violation reports with fix suggestions - 📸 Screenshot capture for violations - 🔐 Authentication support (basic, form-based, custom) - 📱 Mobile and desktop viewport testing - 🎯 Custom rule support - 🚫 Resource blocking for faster scans ## Installation ```bash bun install ``` ## Usage ### Basic Example ```typescript import { AccessibilityScanner } from '@wcag-ada/scanner'; const scanner = new AccessibilityScanner(); await scanner.initialize(); const result = await scanner.scan({ url: 'https://example.com', wcagLevel: { level: 'AA', version: '2.1' } }); console.log(`Compliance Score: ${result.summary.score}%`); console.log(`Violations Found: ${result.summary.violationCount}`); await scanner.close(); ``` ### Advanced Options ```typescript const result = await scanner.scan({ url: 'https://example.com', wcagLevel: { level: 'AA', version: '2.1' }, includeScreenshots: true, viewport: { width: 1920, height: 1080, isMobile: false }, authenticate: { type: 'form', loginUrl: 'https://example.com/login', credentials: { username: 'user@example.com', password: 'password' }, selectors: { username: '#email', password: '#password', submit: 'button[type="submit"]' } }, excludeSelectors: [ '.cookie-banner', '[aria-hidden="true"]' ], waitForSelector: '#main-content', timeout: 60000 }); ``` ### Scan Multiple Pages ```typescript const urls = [ 'https://example.com', 'https://example.com/about', 'https://example.com/contact' ]; const results = await scanner.scanMultiplePages(urls, { wcagLevel: { level: 'AA', version: '2.1' } }); ``` ## Scan Results The scanner returns a comprehensive `AccessibilityScanResult` object containing: - **Summary**: Overall compliance score, violation counts by severity - **Violations**: Detailed list of accessibility issues with: - Impact level (critical, serious, moderate, minor) - Affected elements with HTML snippets - Fix suggestions - WCAG criteria mapping - Screenshots (if enabled) - **Passes**: Rules that passed - **Incomplete**: Rules that need manual review - **Page Metadata**: Title, language, element counts, landmark presence - **WCAG Compliance**: Level-specific compliance status ## Performance Optimization The scanner is optimized for speed: - Blocks unnecessary resources (images, fonts, analytics) - Parallel page scanning support - Configurable timeouts - Headless browser mode ## Custom Rules Add custom accessibility rules: ```typescript const customRules = [{ id: 'custom-button-size', selector: 'button', tags: ['custom', 'wcag21aa'], description: 'Buttons must have minimum touch target size', help: 'Ensure buttons are at least 44x44 pixels', severity: 'serious', validator: (element) => { const rect = element.getBoundingClientRect(); return rect.width >= 44 && rect.height >= 44; } }]; const result = await scanner.scan({ url: 'https://example.com', customRules }); ``` ## Running the Example ```bash bun run src/example.ts ``` ## Development ```bash # Build bun run build # Watch mode bun run dev # Type checking bun run typecheck ```