import { chromium } from '@playwright/test'; import { pathToFileURL } from 'node:url'; import assert from 'node:assert/strict'; import path from 'node:path'; import { report, work } from './scene-editor-closure-live.mjs'; const browser = await chromium.launch({ channel:'msedge', headless:true }); try { const page = await browser.newPage({ viewport:{width:1600,height:1000} }); const errors=[]; page.on('pageerror', error => errors.push(error.message)); await page.goto(pathToFileURL(path.join(report,'index.html')).href); assert.equal(await page.locator('.matrix tbody tr').count(),119); await page.screenshot({path:path.join(work,'report-overview.png')}); await page.locator('#search').fill('模型'); assert.ok(await page.locator('.matrix tbody tr:not(.hidden)').count()>0); await page.locator('#search').fill(''); await page.locator('#state').selectOption('PENDING'); assert.equal(await page.locator('.matrix tbody tr:not(.hidden)').count(),0); await page.locator('#state').selectOption('all'); await page.locator('a.shot').filter({has:page.locator('img[src*="42-fox"]')}).click(); await page.locator('#viewer').waitFor({state:'visible'}); await page.waitForFunction(() => { const img=document.querySelector('#viewer img');return img.complete && img.naturalWidth>0; }); await page.screenshot({path:path.join(work,'report-image-viewer.png')}); await page.locator('#close').click(); assert.equal(errors.length,0); console.log(JSON.stringify({reportUi:'PASS',features:119,filter:true,viewer:true,pageErrors:0})); } finally {await browser.close();}