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

40 lines
2.7 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:1120}});
const errors=[];
page.on('pageerror',e=>errors.push(e.message));
await page.addInitScript(()=>localStorage.setItem('huobao:tours',JSON.stringify(['episode'])));
await page.route('**/api/v1/tasks',route=>route.request().method()==='POST'?route.abort():route.continue());
await page.goto('http://127.0.0.1:18950/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 form=page.locator('.scene-lock-panel');
try { await form.waitFor({timeout:8000}); }
catch(e) { await page.screenshot({path:path.join(process.env.SCENE_FIXTURE,'ui-failure.png')}); console.log('UI:',(await page.locator('body').innerText()).slice(0,2400),errors); throw e; }
assert.match(await form.innerText(),/Dormitory/);
assert.match(await form.innerText(),/所有分镜共用/);
await form.getByLabel('空间与固定陈设').fill('Blue plaster walls; east window; oak desk below the window.');
assert.match(await form.innerText(),/未保存/);
await form.getByRole('button',{name:'保存场景设定',exact:true}).click();
await page.waitForFunction(()=>document.querySelector('.scene-lock-panel .actions')?.textContent.includes('已保存'));
const value=await page.evaluate(async()=> (await (await fetch('/api/v1/storyboards/1/environment')).json()).data);
assert.equal(value.current.environment,'Blue plaster walls; east window; oak desk below the window.');
assert.equal(value.stale,true);
await page.reload({waitUntil:'networkidle'});
await page.getByText('视频制作',{exact:true}).first().click();
await form.waitFor();
assert.equal(await form.getByLabel('空间与固定陈设').inputValue(),'Blue plaster walls; east window; oak desk below the window.');
await form.scrollIntoViewIfNeeded();
await page.screenshot({path:path.join(process.env.SCENE_FIXTURE,'scene-lock-ui.png')});
await page.setViewportSize({width:1280,height:850});
assert.equal(await form.evaluate(e=>e.scrollWidth<=e.clientWidth+2),true);
assert.deepEqual(errors,[]);
console.log('PASS: scene panel, shared setting save, stale version warning, reload persistence, narrow layout; no real generation');
} finally {await browser.close();}
})().catch(e=>{console.error(e.stack);process.exit(1)});