const {chromium}=require('playwright-core'),fs=require('node:fs'),assert=require('node:assert/strict'); (async()=>{ const root='D:/web/dj',base=JSON.parse(fs.readFileSync(root+'/huobao-data/last-launch.json')).api.replace('/api/v1',''); const browser=await chromium.launch({channel:'chrome',headless:true}); try{ const page=await browser.newPage({viewport:{width:1600,height:1100}}),errors=[]; page.on('pageerror',e=>errors.push(e.message)); await page.addInitScript(()=>localStorage.setItem('huobao:tours',JSON.stringify(['episode']))); await page.route('**/api/**',r=>['GET','HEAD'].includes(r.request().method())?r.continue():r.abort()); await page.goto(base+'/drama/5/episode/1',{waitUntil:'networkidle'}); await page.getByText('视频制作',{exact:true}).first().click(); const panel=page.locator('.continuity-panel');await panel.waitFor(); assert.equal(await panel.getByLabel('衔接方式').inputValue(),'none'); assert.equal(await panel.getByRole('button',{name:'保存衔接',exact:true}).isDisabled(),true); await panel.scrollIntoViewIfNeeded(); await page.screenshot({path:root+'/integration-work/continuity-installed.png'}); assert.deepEqual(errors,[]); console.log('PASS: installed continuity panel visible; existing shots unchanged; save disabled without edits; no writes or runtime errors'); }finally{await browser.close()} })().catch(e=>{console.error(e.stack);process.exit(1)});