@@ -46,6 +46,12 @@ async function waitForScrolledNavbarEffect(page: Page) {
4646 . toBeGreaterThan ( 0.95 ) ;
4747}
4848
49+ async function waitForVisualReady ( page : Page ) {
50+ await page . evaluate ( ( ) => document . fonts . ready ) ;
51+ await page . locator ( 'canvas' ) . first ( ) . waitFor ( { state : 'attached' , timeout : 3_000 } ) . catch ( ( ) => undefined ) ;
52+ await page . waitForTimeout ( 500 ) ;
53+ }
54+
4955const states = [
5056 {
5157 name : 'hero' ,
@@ -82,8 +88,7 @@ test.describe('design baseline', () => {
8288 await page . evaluate ( ( ) => window . scrollTo ( 0 , 0 ) ) ;
8389 await expect . poll ( ( ) => page . evaluate ( ( ) => window . scrollY ) ) . toBe ( 0 ) ;
8490 await expect ( page . locator ( '.navbar' ) ) . toBeVisible ( ) ;
85- await page . evaluate ( ( ) => document . fonts . ready ) ;
86- await page . waitForTimeout ( 300 ) ;
91+ await waitForVisualReady ( page ) ;
8792
8893 await expect ( page . locator ( '.navbar' ) ) . toHaveScreenshot ( `${ testInfo . project . name } -navbar.png` , {
8994 animations : 'disabled' ,
@@ -96,8 +101,7 @@ test.describe('design baseline', () => {
96101 await page . goto ( '/' ) ;
97102 await page . evaluate ( ( ) => window . scrollTo ( 0 , 360 ) ) ;
98103 await waitForScrolledNavbarEffect ( page ) ;
99- await page . evaluate ( ( ) => document . fonts . ready ) ;
100- await page . waitForTimeout ( 300 ) ;
104+ await waitForVisualReady ( page ) ;
101105
102106 await expect ( page . locator ( '.navbar' ) ) . toHaveScreenshot ( `${ testInfo . project . name } -navbar-scrolled.png` , {
103107 animations : 'disabled' ,
@@ -109,8 +113,7 @@ test.describe('design baseline', () => {
109113 test ( 'glass surfaces match approved baselines' , async ( { page } , testInfo ) => {
110114 await page . goto ( '/' ) ;
111115 await lockViewportOn ( page , '#team' ) ;
112- await page . evaluate ( ( ) => document . fonts . ready ) ;
113- await page . waitForTimeout ( 300 ) ;
116+ await waitForVisualReady ( page ) ;
114117
115118 await expect ( page . locator ( '.team__card' ) . first ( ) ) . toHaveScreenshot ( `${ testInfo . project . name } -team-glass.png` , {
116119 animations : 'disabled' ,
@@ -163,8 +166,7 @@ test.describe('design baseline', () => {
163166 for ( const state of states ) {
164167 test ( `${ state . name } viewport matches approved baseline` , async ( { page } , testInfo ) => {
165168 await state . target ( page ) ;
166- await page . evaluate ( ( ) => document . fonts . ready ) ;
167- await page . waitForTimeout ( 300 ) ;
169+ await waitForVisualReady ( page ) ;
168170
169171 await expect ( page ) . toHaveScreenshot ( `${ testInfo . project . name } -${ state . name } .png` , {
170172 animations : 'disabled' ,
0 commit comments