import fs from 'node:fs'; import assert from 'node:assert/strict'; import {chromium,expect} from '@playwright/test'; import {login} from './role-permissions-live.mjs'; const dir='reports/bridge-new-models-006-008-20260917',signed=await login('root'),browser=await chromium.launch({channel:'msedge',headless:true}),page=await browser.newPage({viewport:{width:1440,height:1000}}),checks=[]; await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);},signed); try{ for(const [label,origin]of [['local','http://127.0.0.1:6180'],['lan','http://192.168.31.168:6180']]){ await page.goto(origin+'/teaching/virtual-training'); for(const [code,file]of [['006','bridge-pump-substitute-v4.jpg'],['007','bridge-pump-replace-v4.jpg'],['008','bridge-balance-valve-swap-v4.jpg']]){ const card=page.getByTestId('teaching-assignment-TASK-VIRTUAL-'+code),img=card.locator('figure img'); await expect(img).toHaveAttribute('src','/models/bridge-training/'+file,{timeout:30000}); await expect.poll(()=>img.evaluate(i=>i.complete&&i.naturalWidth>0)).toBe(true); checks.push({label,code,file,pass:true}); } await page.screenshot({path:dir+'/list-'+label+'.png',fullPage:true}); assert.ok(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth)); } fs.writeFileSync(dir+'/list.json',JSON.stringify({pass:true,checks},null,2));console.log('PASS',checks.length); }finally{await browser.close();}