190 lines
6.6 KiB
JavaScript
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(); |