@@ -283,13 +283,12 @@ test.describe('Scrolling', () => {
283
283
test ( 'url-supplied non-ascii anchor works on navigation to page after manual scroll' , async ( {
284
284
page,
285
285
in_view,
286
- clicknav
286
+ clicknav,
287
+ scroll_to
287
288
} ) => {
288
289
await page . goto ( '/anchor' ) ;
289
290
await clicknav ( '#non-ascii-anchor' ) ;
290
- await page . evaluate ( ( ) => {
291
- window . scrollTo ( 0 , 50 ) ;
292
- } ) ;
291
+ await scroll_to ( 0 , 50 ) ;
293
292
await page . locator ( '#non-ascii-anchor' ) . click ( ) ;
294
293
expect ( await in_view ( '#go-to-encöded' ) ) . toBe ( true ) ;
295
294
} ) ;
@@ -359,7 +358,8 @@ test.describe('Scrolling', () => {
359
358
360
359
test ( 'scroll is restored after hitting the back button for an in-app cross-document navigation' , async ( {
361
360
page,
362
- clicknav
361
+ clicknav,
362
+ scroll_to
363
363
} ) => {
364
364
await page . goto ( '/scroll/cross-document/a' ) ;
365
365
@@ -368,7 +368,7 @@ test.describe('Scrolling', () => {
368
368
if ( ! rect ) throw new Error ( 'Could not determine bounding box' ) ;
369
369
370
370
const target_scroll_y = rect . y + rect . height - height ;
371
- await page . evaluate ( ( y ) => scrollTo ( 0 , y ) , target_scroll_y ) ;
371
+ await scroll_to ( 0 , target_scroll_y ) ;
372
372
373
373
await page . locator ( '[href="/scroll/cross-document/b"]' ) . click ( ) ;
374
374
expect ( await page . textContent ( 'h1' ) ) . toBe ( 'b' ) ;
@@ -441,7 +441,8 @@ test.describe('Scrolling', () => {
441
441
test ( 'scroll positions are recovered on reloading the page' , async ( {
442
442
page,
443
443
app,
444
- browserName
444
+ browserName,
445
+ scroll_to
445
446
} ) => {
446
447
// No idea why the workaround below works only in dev mode
447
448
// A better solution would probably be to set fission.webContentIsolationStrategy: 1
@@ -451,20 +452,21 @@ test.describe('Scrolling', () => {
451
452
}
452
453
453
454
await page . goto ( '/anchor' ) ;
454
- await page . evaluate ( ( ) => window . scrollTo ( 0 , 1000 ) ) ;
455
+ await scroll_to ( 0 , 1000 ) ;
455
456
await app . goto ( '/anchor/anchor' ) ;
456
- await page . evaluate ( ( ) => window . scrollTo ( 0 , 1000 ) ) ;
457
+ await scroll_to ( 0 , 1000 ) ;
457
458
458
459
await page . reload ( ) ;
459
460
if ( browserName === 'firefox' ) {
460
461
// Firefox with Playwright pushed new history entry history after reload
461
462
// See https://github.com/microsoft/playwright/issues/22640
462
463
await page . goBack ( ) ;
463
464
}
464
- expect ( await page . evaluate ( ( ) => window . scrollY ) ) . toBe ( 1000 ) ;
465
+ await page . waitForFunction ( ( ) => window . scrollY === 1000 ) ;
465
466
467
+ const waiter = page . waitForFunction ( ( ) => window . scrollY === 1000 ) ;
466
468
await page . goBack ( ) ;
467
- expect ( await page . evaluate ( ( ) => window . scrollY ) ) . toBe ( 1000 ) ;
469
+ await waiter ;
468
470
} ) ;
469
471
470
472
test ( 'scroll position is top of page on ssr:false reload' , async ( { page } ) => {
@@ -474,26 +476,32 @@ test.describe('Scrolling', () => {
474
476
expect ( await page . evaluate ( ( ) => window . scrollY ) ) . toBe ( 0 ) ;
475
477
} ) ;
476
478
477
- test ( 'clicking # or #top takes you to the top of the current page' , async ( { page } ) => {
479
+ test ( 'clicking # or #top takes you to the top of the current page' , async ( {
480
+ page,
481
+ scroll_to
482
+ } ) => {
478
483
await page . goto ( '/scroll/top' ) ;
479
484
480
485
for ( const href of [ '#' , '#top' ] ) {
481
- await page . evaluate ( ( ) => window . scrollTo ( 0 , 1000 ) ) ;
486
+ await scroll_to ( 0 , 1000 ) ;
482
487
await page . click ( `a[href="${ href } "]` ) ;
483
488
expect ( await page . evaluate ( ( ) => window . scrollY ) ) . toBe ( 0 ) ;
484
489
485
- await page . evaluate ( ( ) => window . scrollTo ( 0 , 1000 ) ) ;
490
+ await scroll_to ( 0 , 1000 ) ;
486
491
await page . click ( `a[href="${ href } "]` ) ;
487
492
expect ( await page . evaluate ( ( ) => window . scrollY ) ) . toBe ( 0 ) ;
488
493
}
489
494
} ) ;
490
495
491
- test ( 'Scroll position is correct after going back from a shallow route' , async ( { page } ) => {
496
+ test ( 'Scroll position is correct after going back from a shallow route' , async ( {
497
+ page,
498
+ scroll_to
499
+ } ) => {
492
500
await page . goto ( '/scroll/push-state' ) ;
493
501
await page . locator ( '#subpage-link' ) . click ( ) ;
494
502
await page . locator ( '#back-button' ) . click ( ) ;
495
503
496
- await page . evaluate ( ( ) => window . scrollTo ( 0 , 9999 ) ) ;
504
+ await scroll_to ( 0 , 9999 ) ;
497
505
498
506
const scroll = await page . evaluate ( ( ) => window . scrollY ) ;
499
507
expect ( scroll ) . toBeGreaterThan ( 0 ) ;
0 commit comments