UNPKG

arda-site-scan

Version:

A standalone CLI tool for comprehensive website analysis including screenshots, SEO, and accessibility testing using Playwright

112 lines 5.26 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ScreenshotTester = void 0; const chalk_1 = __importDefault(require("chalk")); const session_manager_js_1 = require("../utils/session-manager.js"); const test_output_handler_js_1 = require("../utils/test-output-handler.js"); class ScreenshotTester { sessionManager; constructor() { this.sessionManager = new session_manager_js_1.SessionManager(); } async captureScreenshot(page, pageUrl, viewport, sessionId) { const pageName = test_output_handler_js_1.StandardTestOutputHandler.getPageNameFromUrl(pageUrl); // Create initial test result using standardized system const testResult = this.sessionManager.createStandardTestResult('screenshots', 'pending'); try { console.log(chalk_1.default.gray(` 📸 Capturing ${viewport.name} screenshot (${viewport.width}x${viewport.height})`)); // Set viewport await page.setViewportSize({ width: viewport.width, height: viewport.height }); // Wait for any lazy-loaded content await page.waitForTimeout(1000); // Prepare output context for the screenshot const context = { url: pageUrl, pageName, viewport: viewport.name }; // Generate output path using the standardized system const outputPath = this.sessionManager.generateOutputPath(sessionId, 'screenshots', context); // Ensure directory exists await this.sessionManager.getOutputHandler().ensureOutputDirectory(outputPath); // Capture screenshot await page.screenshot({ path: outputPath, fullPage: true, animations: 'disabled' }); // Update test result with success testResult.status = 'success'; testResult.outputPath = outputPath; testResult.endTime = new Date(); console.log(chalk_1.default.green(` 📄 Screenshot saved: ${outputPath}`)); } catch (error) { testResult.status = 'failed'; testResult.error = error instanceof Error ? error.message : String(error); testResult.endTime = new Date(); console.log(chalk_1.default.red(` ❌ Failed to capture ${viewport.name} screenshot: ${testResult.error}`)); } return testResult; } async captureElementScreenshot(page, selector, pageUrl, viewport, sessionId, elementName) { const pageName = test_output_handler_js_1.StandardTestOutputHandler.getPageNameFromUrl(pageUrl); // Create initial test result using standardized system const testResult = this.sessionManager.createStandardTestResult('screenshots', 'pending'); try { console.log(chalk_1.default.gray(` 📸 Capturing ${elementName} element screenshot`)); await page.setViewportSize({ width: viewport.width, height: viewport.height }); const element = await page.locator(selector); await element.waitFor({ state: 'visible' }); // Prepare output context for the element screenshot const context = { url: pageUrl, pageName, viewport: `${viewport.name}-${elementName}`, additionalData: { element: elementName, selector } }; // Generate output path using the standardized system const outputPath = this.sessionManager.generateOutputPath(sessionId, 'screenshots', context); // Ensure directory exists await this.sessionManager.getOutputHandler().ensureOutputDirectory(outputPath); await element.screenshot({ path: outputPath, animations: 'disabled' }); // Update test result with success testResult.status = 'success'; testResult.outputPath = outputPath; testResult.endTime = new Date(); console.log(chalk_1.default.green(` 📄 Element screenshot saved: ${outputPath}`)); } catch (error) { testResult.status = 'failed'; testResult.error = error instanceof Error ? error.message : String(error); testResult.endTime = new Date(); console.log(chalk_1.default.red(` ❌ Failed to capture ${elementName} element: ${testResult.error}`)); } return testResult; } async captureComparisonScreenshots(page, pageUrl, viewports, sessionId) { const results = []; for (const viewport of viewports) { const result = await this.captureScreenshot(page, pageUrl, viewport, sessionId); results.push(result); } return results; } } exports.ScreenshotTester = ScreenshotTester; //# sourceMappingURL=screenshot-tester.js.map