165 lines
6.1 KiB
JavaScript
165 lines
6.1 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
const { chromium } = require('playwright');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
async function runScreenshotCapture(mode = 'current') {
|
|
console.log(`📸 Starting Screenshot Capture (${mode})...`);
|
|
|
|
// Get target URL from environment variable or use default
|
|
const targetUrl = process.env.TARGET_URL || 'http://host.docker.internal:8080';
|
|
const catalogUrl = `${targetUrl}/catalog.html`;
|
|
|
|
console.log(`📍 Target URL: ${catalogUrl}`);
|
|
|
|
// Create screenshots directory based on mode
|
|
const screenshotsDir = path.join(__dirname, `../visual/${mode}`);
|
|
if (!fs.existsSync(screenshotsDir)) {
|
|
fs.mkdirSync(screenshotsDir, { recursive: true });
|
|
}
|
|
|
|
const browser = await chromium.launch({ headless: true });
|
|
const context = await browser.newContext({
|
|
viewport: { width: 1920, height: 1080 }
|
|
});
|
|
const page = await context.newPage();
|
|
|
|
try {
|
|
// Navigate to the catalog page
|
|
console.log('📍 Navigating to catalog page');
|
|
await page.goto(catalogUrl, { waitUntil: 'networkidle', timeout: 30000 });
|
|
|
|
// Take full page screenshot
|
|
console.log('📸 Taking full page screenshot...');
|
|
await page.screenshot({
|
|
path: path.join(screenshotsDir, 'catalog-full-page.png'),
|
|
fullPage: true
|
|
});
|
|
|
|
// Scroll and capture each major section
|
|
console.log('📷 Capturing Featured Hero Banner...');
|
|
const header = await page.locator('header').first();
|
|
if (await header.isVisible()) {
|
|
await header.screenshot({
|
|
path: path.join(screenshotsDir, 'catalog-hero-banner.png')
|
|
});
|
|
} else {
|
|
console.log('⚠️ Hero banner not found');
|
|
}
|
|
|
|
console.log('📷 Capturing Quick Categories Row...');
|
|
const categoriesSection = await page.locator('#quick-categories');
|
|
if (await categoriesSection.isVisible()) {
|
|
await categoriesSection.screenshot({
|
|
path: path.join(screenshotsDir, 'catalog-quick-categories.png')
|
|
});
|
|
} else {
|
|
console.log('⚠️ Quick categories section not found');
|
|
}
|
|
|
|
console.log('📷 Capturing "¿Por qué comprar con nosotros?" section...');
|
|
const whyBuySection = await page.locator('section.bg-primary');
|
|
if (await whyBuySection.isVisible()) {
|
|
await whyBuySection.screenshot({
|
|
path: path.join(screenshotsDir, 'catalog-why-buy.png')
|
|
});
|
|
} else {
|
|
console.log('⚠️ "¿Por qué comprar con nosotros?" section not found');
|
|
}
|
|
|
|
console.log('📷 Capturing Catalog Grid...');
|
|
const catalogGrid = await page.locator('.container.py-5:has-text("Catálogo")');
|
|
if (await catalogGrid.isVisible()) {
|
|
await catalogGrid.screenshot({
|
|
path: path.join(screenshotsDir, 'catalog-grid.png')
|
|
});
|
|
} else {
|
|
console.log('⚠️ Catalog grid section not found');
|
|
}
|
|
|
|
console.log('📷 Capturing "¿Cómo funciona?" steps section...');
|
|
const howItWorksSection = await page.locator('section.bg-light');
|
|
if (await howItWorksSection.isVisible()) {
|
|
await howItWorksSection.screenshot({
|
|
path: path.join(screenshotsDir, 'catalog-how-it-works.png')
|
|
});
|
|
} else {
|
|
console.log('⚠️ "¿Cómo funciona?" section not found');
|
|
}
|
|
|
|
console.log('📷 Capturing CTA form section...');
|
|
const ctaSection = await page.locator('section.bg-primary:has-text("Reserve su propiedad")');
|
|
if (await ctaSection.isVisible()) {
|
|
await ctaSection.screenshot({
|
|
path: path.join(screenshotsDir, 'catalog-cta-form.png')
|
|
});
|
|
} else {
|
|
console.log('⚠️ CTA form section not found');
|
|
}
|
|
|
|
console.log('📷 Capturing FAQ accordion...');
|
|
const faqSection = await page.locator('section.bg-white:has-text("Preguntas frecuentes")');
|
|
if (await faqSection.isVisible()) {
|
|
await faqSection.screenshot({
|
|
path: path.join(screenshotsDir, 'catalog-faq.png')
|
|
});
|
|
} else {
|
|
console.log('⚠️ FAQ section not found');
|
|
}
|
|
|
|
// Test navigation menu links
|
|
console.log('🧭 Testing navigation menu links...');
|
|
|
|
// Click "Inicio" link
|
|
console.log('🔗 Clicking "Inicio" link...');
|
|
const inicioLink = await page.locator('a.nav-link[href="/"]').first();
|
|
if (await inicioLink.isVisible()) {
|
|
await inicioLink.click();
|
|
await page.waitForTimeout(2000); // Wait for navigation
|
|
|
|
// Verify we're on the homepage
|
|
const currentUrl = page.url();
|
|
console.log(`📍 Current URL after clicking "Inicio": ${currentUrl}`);
|
|
|
|
if (currentUrl.includes('localhost:8080') || currentUrl === targetUrl + '/') {
|
|
console.log('✅ Navigation to homepage successful');
|
|
} else {
|
|
console.log('❌ Navigation to homepage failed');
|
|
}
|
|
|
|
// Go back to catalog page for further testing
|
|
await page.goto(catalogUrl, { waitUntil: 'networkidle' });
|
|
await page.waitForTimeout(1000);
|
|
} else {
|
|
console.log('⚠️ "Inicio" link not found');
|
|
}
|
|
|
|
// Report findings
|
|
console.log('\n📋 SCREENSHOT CAPTURE SUMMARY');
|
|
console.log('=============================');
|
|
console.log(`✅ Full page screenshot captured (${mode})`);
|
|
console.log(`✅ Hero banner section screenshot captured (${mode})`);
|
|
console.log(`✅ Quick categories section screenshot captured (${mode})`);
|
|
console.log(`✅ "¿Por qué comprar con nosotros?" section screenshot captured (${mode})`);
|
|
console.log(`✅ Catalog grid screenshot captured (${mode})`);
|
|
console.log(`✅ "¿Cómo funciona?" section screenshot captured (${mode})`);
|
|
console.log(`✅ CTA form section screenshot captured (${mode})`);
|
|
console.log(`✅ FAQ section screenshot captured (${mode})`);
|
|
console.log(`✅ Navigation test completed (${mode})`);
|
|
|
|
console.log(`\n📁 Screenshots saved to: ${screenshotsDir}`);
|
|
|
|
} catch (error) {
|
|
console.error('❌ Error during screenshot capture:', error);
|
|
} finally {
|
|
await browser.close();
|
|
console.log('\n🏁 Screenshot capture completed');
|
|
}
|
|
}
|
|
|
|
// Get mode from command line arguments
|
|
const mode = process.argv[2] || 'current';
|
|
|
|
// Run the screenshot capture
|
|
runScreenshotCapture(mode); |