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
JavaScript
;
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