const {chromium}=require('playwright-core'); const assert=require('node:assert/strict'); const fs=require('node:fs'); (async()=>{ const browser=await chromium.launch({channel:'chrome',headless:true}); try { const page=await browser.newPage({viewport:{width:1440,height:1000}}); const errors=[];page.on('pageerror',e=>errors.push(e.message)); await page.goto('http://127.0.0.1:18879/',{waitUntil:'networkidle'}); await page.getByText('高清功能验证(隔离测试)',{exact:true}).click(); await page.getByRole('button',{name:/进入制作/}).click(); await page.getByRole('navigation').getByRole('button',{name:/^高清制作/}).click(); await page.getByRole('heading',{name:'高清制作 MiniMax H3-VDN-H3'}).waitFor(); await page.getByText('原版',{exact:true}).waitFor(); const selector=page.getByLabel(/目标分辨率/); await selector.selectOption('4K'); assert.equal(await selector.inputValue(),'4K'); await page.waitForFunction(()=>document.querySelectorAll('.hd-compare video').length===2 && [...document.querySelectorAll('.hd-compare video')].every(v=>v.videoWidth>0)); const videos=await page.locator('.hd-compare video').evaluateAll(es=>es.map(e=>({src:e.getAttribute('src'),width:e.videoWidth,height:e.videoHeight}))); assert.equal(videos[0].width,512);assert.equal(videos[0].height,288); assert.equal(videos[1].width,3840);assert.equal(videos[1].height,2160); assert.equal(await page.getByRole('button',{name:'生成 4K 高清版'}).isEnabled(),true); const playback=await page.locator('.hd-compare video').nth(1).evaluate(async v=>{ v.muted=true;await v.play();await new Promise(r=>setTimeout(r,700));v.pause(); return {time:v.currentTime,error:v.error?.message||null}; }); assert.ok(playback.time>0);assert.equal(playback.error,null); assert.deepEqual(errors,[]); await page.screenshot({path:'D:/web/dj/integration-work/hd-page-verified.png',fullPage:true}); fs.writeFileSync('D:/web/dj/integration-work/hd-ui-result.json',JSON.stringify({passed:true,url:page.url(),videos,playback,errors},null,2)); console.log('PASS: HD navigation, 2K/4K selection, original + real 4K playback; no page errors'); }finally{await browser.close()} })().catch(e=>{console.error(e.stack);process.exit(1)});