@@ -334,40 +334,57 @@ describe("Page scrolling", () => {
334
334
} ) ;
335
335
336
336
it ( "tests that page scrolling is blocked and restored" , async ( ) => {
337
- await browser . $ ( "#cbScrollable" ) . click ( ) ;
338
- const offsetHeightBefore = await browser . $ ( "body" ) . getProperty ( "offsetHeight" ) ;
339
-
340
337
await browser . $ ( "#btnOpenDialog" ) . click ( ) ;
338
+ let pageOverflow = await browser . execute ( "return window.getComputedStyle(document.documentElement).overflow;" ) ;
341
339
342
- assert . isBelow ( await browser . $ ( "body" ) . getProperty ( "offsetHeight" ) , offsetHeightBefore , "Body scrolling is blocked") ;
340
+ assert . strictEqual ( pageOverflow , "hidden" , "Page scrolling is blocked") ;
343
341
344
342
await browser . $ ( "#btnCloseDialog" ) . click ( ) ;
343
+ pageOverflow = await browser . execute ( "return window.getComputedStyle(document.documentElement).overflow;" ) ;
345
344
346
- assert . strictEqual ( await browser . $ ( "body" ) . getProperty ( "offsetHeight" ) , offsetHeightBefore , "Body scrolling is restored" ) ;
347
- await browser . $ ( "#cbScrollable" ) . click ( ) ;
345
+ assert . strictEqual ( pageOverflow , "visible" , "Page scrolling is restored" ) ;
348
346
} ) ;
349
347
350
- it ( "tests that page scrolling is blocked and restored after multiple show() of same dialog" , async ( ) => {
348
+ it ( "tests that page scrolling position is preserved" , async ( ) => {
349
+ // scroll position might change slightly when the scrollbars hide and then appear again
350
+ const SCROLLBAR_DELTA = 20 ;
351
351
await browser . $ ( "#cbScrollable" ) . click ( ) ;
352
- const offsetHeightBefore = await browser . $ ( "body" ) . getProperty ( "offsetHeight" ) ;
352
+ const scrolledButton = await $ ( "#scrolledBtn" ) ;
353
+ await scrolledButton . scrollIntoView ( ) ;
354
+ const scrollLeftBefore = await browser . $ ( "html" ) . getProperty ( "scrollLeft" ) ;
355
+ const scrollTopBefore = await browser . $ ( "html" ) . getProperty ( "scrollTop" ) ;
356
+ await scrolledButton . click ( ) ;
357
+
358
+ assert . strictEqual ( await browser . $ ( "html" ) . getProperty ( "scrollLeft" ) , scrollLeftBefore , "Horizontal page scroll position is preserved" ) ;
359
+ assert . approximately ( await browser . $ ( "html" ) . getProperty ( "scrollTop" ) , scrollTopBefore , SCROLLBAR_DELTA , "Vertical page scroll position is preserved" ) ;
360
+
361
+ await browser . keys ( "Escape" ) ;
353
362
363
+ assert . strictEqual ( await browser . $ ( "html" ) . getProperty ( "scrollLeft" ) , scrollLeftBefore , "Horizontal page scroll position is preserved" ) ;
364
+ assert . approximately ( await browser . $ ( "html" ) . getProperty ( "scrollTop" ) , scrollTopBefore , SCROLLBAR_DELTA , "Vertical page scroll position is preserved" ) ;
365
+
366
+ await browser . $ ( "#cbScrollable" ) . click ( ) ;
367
+ } ) ;
368
+
369
+ it ( "tests that page scrolling is blocked and restored after multiple show() of same dialog" , async ( ) => {
354
370
await browser . $ ( "#multiple-show" ) . click ( ) ;
371
+ let pageOverflow = await browser . execute ( "return window.getComputedStyle(document.documentElement).overflow;" ) ;
355
372
356
- assert . isBelow ( await browser . $ ( "body" ) . getProperty ( "offsetHeight" ) , offsetHeightBefore , "Body scrolling is blocked") ;
373
+ assert . strictEqual ( pageOverflow , "hidden" , "Page scrolling is blocked") ;
357
374
358
375
await browser . $ ( "#btnCloseDialog" ) . click ( ) ;
376
+ pageOverflow = await browser . execute ( "return window.getComputedStyle(document.documentElement).overflow;" ) ;
359
377
360
- assert . strictEqual ( await browser . $ ( "body" ) . getProperty ( "offsetHeight" ) , offsetHeightBefore , "Body scrolling is restored" ) ;
361
- await browser . $ ( "#cbScrollable" ) . click ( ) ;
378
+ assert . strictEqual ( pageOverflow , "visible" , "Page scrolling is restored" ) ;
362
379
} ) ;
363
380
364
381
it ( "test page scrolling is restored after close with ESC" , async ( ) => {
365
382
await browser . $ ( "#cbScrollable" ) . click ( ) ;
366
- const offsetHeightBefore = await browser . $ ( "body " ) . getProperty ( "offsetHeight " ) ;
383
+ const scrollHeightBefore = await browser . $ ( "html " ) . getProperty ( "scrollHeight " ) ;
367
384
368
385
await browser . $ ( "#btnOpenDialog" ) . click ( ) ;
369
386
await browser . keys ( "Escape" ) ;
370
- assert . strictEqual ( await browser . $ ( "body " ) . getProperty ( "offsetHeight " ) , offsetHeightBefore , "Body scrolling is restored" ) ;
387
+ assert . strictEqual ( await browser . $ ( "html " ) . getProperty ( "scrollHeight " ) , scrollHeightBefore , "Body scrolling is restored" ) ;
371
388
372
389
await browser . $ ( "#cbScrollable" ) . click ( ) ;
373
390
} ) ;
0 commit comments