Files
dj/integration-work/browser-test/verify_video_cleanup_ui.cjs
2026-11-13 11:46:25 +08:00

26 lines
1.6 KiB
JavaScript

const {chromium}=require('playwright-core');
const assert=require('node:assert/strict');
const path=require('node:path');
(async()=>{
const browser=await chromium.launch({channel:'chrome',headless:true});
try{
const page=await browser.newPage({viewport:{width:1600,height:1100}}),errors=[];
let polls=0;
page.on('pageerror',e=>errors.push(e.message));
page.on('request',r=>{if(r.url().includes('/episodes/1/generation-tasks'))polls++});
await page.addInitScript(()=>localStorage.setItem('huobao:tours',JSON.stringify(['episode'])));
await page.goto('http://127.0.0.1:18980/drama/1/episode/1',{waitUntil:'networkidle'});
const close=page.locator('.driver-popover-close-btn');if(await close.isVisible())await close.click();
await page.getByText('任务',{exact:true}).first().click();
const states=page.getByTestId('video-remote-cleanup');await states.first().waitFor();
const text=(await states.allTextContents()).join('\n');
assert.match(text,/任务记录和视频源文件已清理/);assert.match(text,/暂未清理,将自动重试/);
const before=polls,deadline=Date.now()+10000;
while(polls<=before && Date.now()<deadline)await new Promise(r=>setTimeout(r,100));
assert.ok(polls>before,'Completed tasks with pending cleanup keep polling');
assert.deepEqual(errors,[]);
await page.screenshot({path:path.join(process.env.CLEANUP_FIXTURE,'cleanup-status-ui.png')});
console.log('PASS UI: completed video cleanup status, independent retry note, polling continues without running video jobs');
}finally{await browser.close()}
})().catch(e=>{console.error(e.stack);process.exit(1)});