const puppeteer = require('puppeteer-core'); (async () => { const browser = await puppeteer.launch({ headless: true, 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(); // Capture console logs page.on('console', msg => { console.log('CONSOLE:', msg.type(), msg.text()); }); page.on('pageerror', error => { console.log('PAGE ERROR:', error.message); }); 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, 3000)); console.log('=== Checking Button Status ==='); // Check rrweb loading const rrwebStatus = await page.evaluate(() => { return { hasrrweb: typeof rrweb !== 'undefined', hasRecord: typeof rrweb.record === 'function', hasReplayer: typeof rrweb.Replayer === 'function', hasExport: typeof exportRecording === 'function' }; }); console.log('rrweb Status:', rrwebStatus); // Check button states const buttonStates = await page.evaluate(() => { const elements = { playToggle: document.getElementById('play-toggle-btn'), timeline: document.getElementById('timeline'), speedButtons: document.querySelectorAll('.speed-controls button'), exportButton: document.querySelector('button[onclick="exportRecording()"]'), startBtn: document.getElementById('start-btn'), stopBtn: document.getElementById('stop-btn') }; const states = {}; for (const [key, elem] of Object.entries(elements)) { states[key] = { exists: !!elem, disabled: elem ? elem.disabled : false, text: elem ? elem.textContent : 'N/A' }; } return states; }); console.log('Button States:', buttonStates); // Check if setupButtons was called const setupStatus = await page.evaluate(() => { return { setupButtonsExists: typeof window.setupButtons === 'function', speedButtons: Array.from(document.querySelectorAll('.speed-controls button')).length, playToggleExists: !!document.getElementById('play-toggle-btn'), timelineExists: !!document.getElementById('timeline') }; }); console.log('Setup Status:', setupStatus); // Test individual functions const functionTests = await page.evaluate(() => { return { exportRecording: typeof window.exportRecording === 'function', toggleReplay: typeof window.toggleReplay === 'function', changeReplaySpeed: typeof window.changeReplaySpeed === 'function' }; }); console.log('Function Tests:', functionTests); // Try to call exportRecording directly try { await page.evaluate(() => { window.exportRecording(); }); console.log('✓ exportRecording called successfully'); } catch (e) { console.log('✗ exportRecording failed:', e.message); } await browser.close(); })().catch(e => { console.error(e); process.exit(1); });