import fs from 'node:fs' import {chromium,expect} from '@playwright/test' const report='reports/guide-formal-20260910',checks=[],errors=[],external=[] const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']}) const page=await browser.newPage({viewport:{width:1440,height:1000}}) page.on('pageerror',e=>errors.push(e.message)) await page.route('**/*',route=>{const url=new URL(route.request().url());if(url.hostname!=='127.0.0.1'&&!['blob:','data:'].includes(url.protocol)){external.push(url.origin);return route.abort()}return route.continue()}) try{ await page.goto('http://127.0.0.1:18769/') await page.locator('[data-action="open-model-library"]').click() await page.locator('[data-model-select]').scrollIntoViewIfNeeded() for(const [index,name] of [['1','15-offline-fox-scene'],['3','16-offline-truck-scene']]){ await page.locator('[data-model-select]').selectOption(index) await expect(page.locator('[data-model-status]')).not.toContainText(/正在|尚未|失败/,{timeout:90000}) await page.waitForTimeout(2000) await page.screenshot({path:`${report}/${name}.png`}) checks.push({name,pass:true,detail:await page.locator('[data-model-status]').textContent()}) } }catch(e){checks.push({name:'离线场景浏览器读取',pass:false,detail:e.message});process.exitCode=1} finally{checks.push({name:'离线资源不依赖业务服务器或公网',pass:external.length===0,detail:external.join(',')},{name:'无脚本异常',pass:errors.length===0,detail:errors.join('\n')});console.log(checks);fs.writeFileSync(`${report}/offline-browser.json`,JSON.stringify({checks,errors},null,2));await browser.close()}