const puppeteer = require('puppeteer-core'); (async () => { const browser = await puppeteer.launch({ headless: false, executablePath: 'C:\\Users\\xgp\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe', args: ['--allow-file-access-from-files', '--disable-web-security'] }); const page = await browser.newPage(); // Override alert page.evaluateOnNewDocument(() => { window.alert = (msg) => { console.log('ALERT:', msg); return true; }; }); await page.goto('file:///C:/Users/xgp/projects/rrweb/index.html', { waitUntil: 'networkidle2', timeout: 120000 }); // Wait for scripts to load await new Promise(r => setTimeout(r, 2000)); console.log('=== Testing Export Function ==='); // Test 1: Check export button exists const exportButtonExists = await page.$('button[onclick="exportRecording()"]') !== null; console.log('✓ Export button exists:', exportButtonExists); // Test 2: Try to export with no data await page.click('button[onclick="exportRecording()"]'); await new Promise(r => setTimeout(r, 1000)); // Test 3: Record some data console.log('\n1. Recording test data...'); await page.click('#start-btn'); await page.evaluate(() => { document.querySelector('button[onclick="changeColor()"]').click(); document.querySelector('button[onclick="addCounter()"]').click(); }); await new Promise(r => setTimeout(r, 1000)); await page.click('#stop-btn'); await new Promise(r => setTimeout(r, 2000)); // Check if we have recorded data const recordedEvents = await page.evaluate(() => { return (window.events || []).length; }); console.log('✓ Recorded events:', recordedEvents); // Test 4: Export with data console.log('\n2. Testing export functionality...'); await page.click('button[onclick="exportRecording()"]'); await new Promise(r => setTimeout(r, 2000)); // Check if the download dialog appears console.log('✓ Export triggered - should see download dialog'); // Test 5: Verify export data structure console.log('\n3. Verifying export data structure...'); const exportDataTest = await page.evaluate(() => { const events = window.events || []; if (events.length === 0) return false; const testExport = { version: '1.0', timestamp: new Date().toISOString(), events: events.slice(0, 2) // Test with first 2 events }; const jsonStr = JSON.stringify(testExport, null, 2); const parsed = JSON.parse(jsonStr); return ( parsed.version === '1.0' && parsed.timestamp && Array.isArray(parsed.events) && parsed.events.length > 0 ); }); console.log('✓ Export data structure valid:', exportDataTest); // Test 6: Test clear functionality after export console.log('\n4. Testing clear after export...'); await page.click('button[onclick="clearAll()"]'); await new Promise(r => setTimeout(r, 1000)); const cleared = await page.evaluate(() => { return (window.events || []).length === 0; }); console.log('✓ Clear works after export:', cleared); console.log('\n=== Export Test Results ==='); console.log('✓ Export button exists'); console.log('✓ Export triggered with data'); console.log('✓ Export data structure valid'); console.log('✓ Clear functionality preserved'); await browser.close(); })().catch(e => { console.error(e); process.exit(1); });