Files
TenerifeProp/tests/scripts/catalog-capture.js

190 lines
6.6 KiB
JavaScript

#!/usr/bin/env node
const { chromium } = require('playwright');
const fs = require('fs');
const path = require('path');
async function runCatalogTest() {
console.log('🔍 Starting Catalog Page Visual Test...');
// 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 if it doesn't exist
const screenshotsDir = path.join(__dirname, '../screenshots');
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📋 TEST RESULTS SUMMARY');
console.log('======================');
console.log('✅ Full page screenshot captured');
console.log('✅ Hero banner section screenshot captured');
console.log('✅ Quick categories section screenshot captured');
console.log('✅ "¿Por qué comprar con nosotros?" section screenshot captured');
console.log('✅ Catalog grid screenshot captured');
console.log('✅ "¿Cómo funciona?" section screenshot captured');
console.log('✅ CTA form section screenshot captured');
console.log('✅ FAQ section screenshot captured');
console.log('✅ Navigation test completed');
console.log('\n📁 Screenshots saved to:', screenshotsDir);
// Create a summary report
const report = `
# Catalog Page Visual Test Report
## Test Execution
- URL: ${catalogUrl}
- Timestamp: ${new Date().toISOString()}
## Screenshots Captured
1. Full page screenshot
2. Hero banner section
3. Quick categories row
4. "¿Por qué comprar con nosotros?" section
5. Catalog grid
6. "¿Cómo funciona?" steps section
7. CTA form section
8. FAQ accordion
## Navigation Test
- Clicking "Inicio" link: ${await inicioLink.isVisible() ? '✅ Passed' : '⚠️ Not found'}
## Status
All tests completed successfully.
`;
fs.writeFileSync(path.join(screenshotsDir, 'catalog-test-report.md'), report);
console.log('\n📝 Test report saved to:', path.join(screenshotsDir, 'catalog-test-report.md'));
} catch (error) {
console.error('❌ Error during test execution:', error);
} finally {
await browser.close();
console.log('\n🏁 Test execution completed');
}
}
// Run the test
runCatalogTest();