import puppeteer from 'puppeteer-core'; const CHROME = 'C:/Program Files/Google/Chrome/Application/chrome.exe'; const URL = process.argv[2] || 'http://localhost:5199/'; // 轻量冒烟测试:不做完整渲染流程 / 不触发 Cesium, // 只检查「加载无 JS 报错 + loading 环出现 + 6 秒后淡出 + App 就绪」。 // 用真实 GPU(不强制 swiftshader 软件渲染)。 const browser = await puppeteer.launch({ executablePath: CHROME, headless: 'new', args: ['--no-sandbox', '--window-size=1440,900'], }); const page = await browser.newPage(); await page.setViewport({ width: 1440, height: 900 }); const errors = []; page.on('pageerror', (e) => errors.push('pageerror: ' + e.message)); page.on('console', (m) => { // preview 模式无 HMR,WebSocket 连接失败是正常现象,过滤掉 if (m.type() === 'error' && !/WebSocket|ERR_CONNECTION/i.test(m.text())) { errors.push('console: ' + m.text()); } }); await page.goto(URL, { waitUntil: 'domcontentloaded', timeout: 30000 }); // 阶段一:加载环应已出现且正在展示 await new Promise((r) => setTimeout(r, 2000)); const loading = await page.evaluate(() => ({ hasCanvas: !!document.querySelector('#loading-canvas canvas'), loadingShown: !document.getElementById('loading').classList.contains('hidden'), appReady: !!window.__app, })); // 阶段二:约 9 秒后,loading 应已淡出、App 应已就绪 await new Promise((r) => setTimeout(r, 7000)); const done = await page.evaluate(() => ({ loadingHidden: document.getElementById('loading').classList.contains('hidden'), appReady: !!window.__app, view: window.__app?.view, pages: window.__app?.binder?.pages?.length, timelineCards: window.__app?.timeline?.cards?.length, })); console.log('阶段一(加载中):', JSON.stringify(loading)); console.log('阶段二(加载后):', JSON.stringify(done)); console.log('ERRORS:', errors.length ? errors.join('\n') : '(none)'); await browser.close();