From 8b949484c11b31cf867b148678d6dfdb4a94dd2b Mon Sep 17 00:00:00 2001 From: Codex Bot Date: Sun, 1 Nov 2026 15:40:33 +0800 Subject: [PATCH] fix(ci): wait for canvas hydration instead of the window load event --- apps/studio/scripts/infinite-canvas-smoke.cjs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/studio/scripts/infinite-canvas-smoke.cjs b/apps/studio/scripts/infinite-canvas-smoke.cjs index 344aa7c..684e844 100644 --- a/apps/studio/scripts/infinite-canvas-smoke.cjs +++ b/apps/studio/scripts/infinite-canvas-smoke.cjs @@ -20,7 +20,9 @@ const fs=require('node:fs/promises'); async function unobstructed(id){const box=await node(id).boundingBox();assert.ok(box);for(const card of (await snapshot()).cards.filter(n=>n.id!==id)){const other=await node(card.id).boundingBox();assert.ok(other);assert.equal(box.xother.x&&box.yother.y,false,`${id} overlaps ${card.id}`)}} const close=(a,b)=>assert.ok(Math.abs(a-b)<2,`${a} ≈ ${b}`); async function drag(handle,dx,dy){const b=await handle.boundingBox();assert.ok(b);await page.mouse.move(b.x+b.width/2,b.y+b.height/2);await page.mouse.down();await page.mouse.move(b.x+b.width/2+dx,b.y+b.height/2+dy,{steps:12});await page.mouse.up()} - await page.goto(base+'/infinite_canvas'); + const canvasResponse=await page.goto(base+'/infinite_canvas',{waitUntil:'commit',timeout:60000}); + assert.ok(canvasResponse?.ok(),'Canvas document returns HTTP success'); + await page.locator('button[data-theme-ready="true"]').waitFor(); await page.getByRole('button',{name:'从示例开始 ↗',exact:true}).click(); await page.getByRole('button',{name:'适应画布',exact:true}).click(); await content('brief').click({position:{x:20,y:20}}); @@ -99,7 +101,7 @@ const fs=require('node:fs/promises'); const anchorBefore=await worldAt();await page.mouse.move(1450,150);await page.keyboard.down('Control');await page.mouse.wheel(0,-80);await page.keyboard.up('Control'); await page.waitForFunction(z=>new DOMMatrix(getComputedStyle(document.querySelector('[class*=world]')).transform).a!==z,anchorBefore.z); const anchorAfter=await worldAt();close(anchorBefore.x,anchorAfter.x);close(anchorBefore.y,anchorAfter.y); - const saved=await snapshot();await page.reload();await page.waitForFunction(()=>!!localStorage.getItem('studio.infinite-canvas.v1'));assert.deepEqual(await snapshot(),saved); + const saved=await snapshot();await page.reload({waitUntil:'commit',timeout:60000});await page.locator('button[data-theme-ready="true"]').waitFor();await page.waitForFunction(()=>!!localStorage.getItem('studio.infinite-canvas.v1'));assert.deepEqual(await snapshot(),saved); const themeToggle=page.getByRole('button',{name:'切换明暗主题',exact:true}); await page.waitForFunction(()=>document.querySelector('[data-theme-ready]')?.dataset.themeReady==='true'); const initialMode=await page.evaluate(()=>document.documentElement.dataset.mode);