diff --git a/apps/waterfall-wiki/tests/canvas-ui-integration.ts b/apps/waterfall-wiki/tests/canvas-ui-integration.ts index afa0387..ade6fb5 100644 --- a/apps/waterfall-wiki/tests/canvas-ui-integration.ts +++ b/apps/waterfall-wiki/tests/canvas-ui-integration.ts @@ -10,8 +10,10 @@ export async function verifyCanvasAgentUI(base:string){ await db().query("INSERT INTO account_users(id,email,password_hash,verified_at) VALUES($1,$2,$3,now())",[owner,email,await hashPassword(password)]); const browser=await chromium.launch({executablePath:process.env.CHROMIUM_PATH||'/usr/bin/chromium',headless:true,args:['--no-sandbox','--disable-dev-shm-usage']}); const context=await browser.newContext({viewport:{width:1440,height:1000}}),errors:string[]=[]; + const page=await context.newPage(),canvasRequests:string[]=[]; + page.on('response',response=>{const url=new URL(response.url());if(url.pathname.startsWith('/api/canvases'))canvasRequests.push(`${response.request().method()} ${url.pathname} ${response.status()}`)}); try{ - const page=await context.newPage();page.setDefaultTimeout(20000);page.on('pageerror',e=>errors.push(e.message)); + page.setDefaultTimeout(20000);page.on('pageerror',e=>errors.push(e.message)); await page.goto(base+'/',{waitUntil:'domcontentloaded'}); await page.getByRole('heading',{name:/想法不该停在对话里/,level:1}).waitFor(); await page.getByRole('link',{name:'开始创作',exact:true}).click(); @@ -24,6 +26,7 @@ export async function verifyCanvasAgentUI(base:string){ const session=(await context.cookies()).find(c=>c.name===ACCOUNT_COOKIE);assert.ok(session?.httpOnly,'The actual login response establishes an HTTP-only account session'); const ownerHeaders={cookie:ACCOUNT_COOKIE+'='+session.value}; await page.getByRole('link',{name:'无限画布',exact:true}).click(); + await page.getByRole('link',{name:email,exact:true}).waitFor({state:'attached'}); await page.getByRole('button',{name:'从示例开始 ↗',exact:true}).click(); const shot=page.locator('[data-node-id="shot"] [data-node-content]'); await shot.click();await shot.click(); @@ -89,5 +92,9 @@ export async function verifyCanvasAgentUI(base:string){ await page.locator('[data-node-id="shot"] [data-node-content]').getByText(generated,{exact:true}).waitFor(); assert.deepEqual(errors,[]); console.log('Canvas UI dispatched a real stored task, received an external-client fixture result, rotated/revoked access and restored its online document'); + }catch(error){ + const statuses=await page.getByRole('status').allTextContents().catch(()=>[]); + console.error('Canvas agent UI diagnostics',JSON.stringify({url:page.url(),statuses,canvasRequests:canvasRequests.slice(-20),errors})); + throw error; }finally{await context.close();await browser.close()} }