You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

21 line
1.6 KiB

  1. import fs from 'node:fs'
  2. import {chromium,expect} from '@playwright/test'
  3. const report='reports/guide-formal-20260910',checks=[],errors=[],external=[]
  4. const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']})
  5. const page=await browser.newPage({viewport:{width:1440,height:1000}})
  6. page.on('pageerror',e=>errors.push(e.message))
  7. 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()})
  8. try{
  9. await page.goto('http://127.0.0.1:18769/')
  10. await page.locator('[data-action="open-model-library"]').click()
  11. await page.locator('[data-model-select]').scrollIntoViewIfNeeded()
  12. for(const [index,name] of [['1','15-offline-fox-scene'],['3','16-offline-truck-scene']]){
  13. await page.locator('[data-model-select]').selectOption(index)
  14. await expect(page.locator('[data-model-status]')).not.toContainText(/正在|尚未|失败/,{timeout:90000})
  15. await page.waitForTimeout(2000)
  16. await page.screenshot({path:`${report}/${name}.png`})
  17. checks.push({name,pass:true,detail:await page.locator('[data-model-status]').textContent()})
  18. }
  19. }catch(e){checks.push({name:'离线场景浏览器读取',pass:false,detail:e.message});process.exitCode=1}
  20. 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()}