import puppeteer from 'puppeteer'; import fs from 'fs'; import path from 'path'; (async () => { const dir = './docs/notification-review'; if (!fs.existsSync(dir)){ fs.mkdirSync(dir, { recursive: true }); } console.log('Launching browser...'); const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] }); const page = await browser.newPage(); await page.setViewport({ width: 1280, height: 800 }); console.log('Navigating to showcase...'); await page.goto('http://localhost:8000/notification-showcase', { waitUntil: 'networkidle2' }); const cases = [ { id: 1, name: 'login_failed' }, { id: 2, name: 'access_denied' }, { id: 3, name: 'first_login' }, { id: 4, name: 'delete_user_confirmation' }, { id: 5, name: 'create_user_success' }, { id: 6, name: 'email_already_exists' }, { id: 7, name: 'employee_id_already_exists' }, { id: 8, name: 'no_data_found' }, { id: 9, name: 'not_enough_thankcards' }, { id: 10, name: 'max_5_thankcards_per_month' }, { id: 11, name: 'send_thankcards_confirmation' }, { id: 12, name: 'send_thankcards_success' }, { id: 13, name: 'password_confirmation_mismatch' }, { id: 14, name: 'change_password_success' }, { id: 15, name: 'generic_system_error' } ]; for (const c of cases) { console.log(`Triggering Case ${c.id}: ${c.name}...`); // Click the button await page.click(`#case-btn-${c.id}`); // Wait for animation await new Promise(resolve => setTimeout(resolve, 800)); // Save screenshot const filename = `case_${String(c.id).padStart(2, '0')}_${c.name}.png`; const filepath = path.join(dir, filename); await page.screenshot({ path: filepath }); console.log(`Saved screenshot to ${filepath}`); } await browser.close(); console.log('Finished capturing all 15 screenshots!'); })();