50 lines
1.9 KiB
JavaScript
50 lines
1.9 KiB
JavaScript
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();
|