@@ -570,47 +570,19 @@ describe('Page.click', function() {
570
570
expect ( clicked ) . toBe ( true ) ;
571
571
expect ( await page . evaluate ( ( ) => window . clicked ) ) . toBe ( true ) ;
572
572
} ) ;
573
- it ( 'should retry when element jumps during hit testing' , async ( { page, server} ) => {
574
- await page . goto ( server . PREFIX + '/input/animating-button.html' ) ;
575
- await page . evaluate ( ( ) => addButton ( ) ) ;
576
- let clicked = false ;
577
- const handle = await page . $ ( 'button' ) ;
578
- const __testHookBeforeHitTarget = ( ) => page . evaluate ( ( ) => { if ( window . x === 0 ) jump ( ) ; } ) ;
579
- const promise = handle . click ( { timeout : 0 , __testHookBeforeHitTarget } ) . then ( ( ) => clicked = true ) ;
580
- expect ( clicked ) . toBe ( false ) ;
581
- expect ( await page . evaluate ( ( ) => window . clicked ) ) . toBe ( undefined ) ;
582
- await page . evaluate ( ( ) => stopButton ( ) ) ;
583
- await promise ;
584
- expect ( clicked ) . toBe ( true ) ;
585
- expect ( await page . evaluate ( ( ) => window . clicked ) ) . toBe ( true ) ;
586
- } ) ;
587
573
it ( 'should fail when element jumps during hit testing' , async ( { page, server} ) => {
588
- await page . goto ( server . PREFIX + '/input/animating-button.html' ) ;
589
- await page . evaluate ( ( ) => addButton ( ) ) ;
590
- await page . evaluate ( ( ) => stopButton ( ) ) ;
574
+ await page . setContent ( '<button>Click me</button>' ) ;
591
575
let clicked = false ;
592
576
const handle = await page . $ ( 'button' ) ;
593
- const __testHookBeforeHitTarget = ( ) => page . evaluate ( ( ) => jump ( ) ) ;
594
- const promise = handle . click ( { timeout : 1000 , __testHookBeforeHitTarget, __testHookSkipStablePosition : true } ) . then ( ( ) => clicked = true ) . catch ( e => e ) ;
577
+ const __testHookBeforeHitTarget = ( ) => page . evaluate ( ( ) => {
578
+ const margin = parseInt ( document . querySelector ( 'button' ) . style . marginLeft || 0 ) + 100 ;
579
+ document . querySelector ( 'button' ) . style . marginLeft = margin + 'px' ;
580
+ } ) ;
581
+ const promise = handle . click ( { timeout : 1000 , __testHookBeforeHitTarget } ) . then ( ( ) => clicked = true ) . catch ( e => e ) ;
595
582
const error = await promise ;
596
583
expect ( clicked ) . toBe ( false ) ;
597
584
expect ( await page . evaluate ( ( ) => window . clicked ) ) . toBe ( undefined ) ;
598
- expect ( error . message ) . toBe ( 'waiting for element to receive pointer events failed: timeout exceeded' ) ;
599
- } ) ;
600
- it . fail ( CHROMIUM || FFOX ) ( 'should work when element jumps uncontrollably' , async ( { page, server} ) => {
601
- // This test requires pausing the page.
602
- await page . goto ( server . PREFIX + '/input/animating-button.html' ) ;
603
- await page . evaluate ( ( ) => addButton ( ) ) ;
604
- await page . evaluate ( ( ) => stopButton ( ) ) ;
605
- const handle = await page . $ ( 'button' ) ;
606
- await page . evaluate ( ( ) => startJumping ( ) ) ;
607
- let clicked = false ;
608
- const promise = handle . click ( { timeout : 1000 , __testHookSkipStablePosition : true } ) . then ( ( ) => clicked = true ) ;
609
- expect ( clicked ) . toBe ( false ) ;
610
- expect ( await page . evaluate ( ( ) => window . clicked ) ) . toBe ( undefined ) ;
611
- await promise ;
612
- expect ( clicked ) . toBe ( true ) ;
613
- expect ( await page . evaluate ( ( ) => window . clicked ) ) . toBe ( true ) ;
585
+ expect ( error . message ) . toContain ( 'timeout exceeded' ) ;
614
586
} ) ;
615
587
it . fail ( CHROMIUM || FFOX ) ( 'should pause animations' , async ( { page} ) => {
616
588
// This test requires pausing the page.
@@ -621,6 +593,7 @@ describe('Page.click', function() {
621
593
}
622
594
.spinner {
623
595
animation: spinner 2s linear infinite;
596
+ animation-delay: 500ms;
624
597
}
625
598
</style>
626
599
<div class="spinner" style="width: 500px; height: 500px; display: flex; justify-content: center;" >
@@ -629,40 +602,40 @@ describe('Page.click', function() {
629
602
onclick="window.clicked=true"></button>
630
603
</div>
631
604
` ) ;
632
- await page . click ( '#target' , { __testHookSkipStablePosition : new Promise ( f => setTimeout ( f , 100 ) ) } ) ;
605
+ await page . click ( '#target' , { __testHookBeforeHitTarget : ( ) => new Promise ( f => setTimeout ( f , 1000 ) ) } ) ;
633
606
expect ( await page . evaluate ( ( ) => window . clicked ) ) . toBe ( true ) ;
634
607
} ) ;
635
608
it . fail ( CHROMIUM || FFOX ) ( 'should defer timers' , async ( { page} ) => {
636
609
// This test requires pausing the page.
637
610
await page . setContent ( `<button id=button onclick="window.clicked=true">Click me</button>` ) ;
638
- await page . click ( 'button' , { __testHookSkipStablePosition : async ( ) => {
611
+ await page . click ( 'button' , { __testHookBeforeHitTarget : async ( ) => {
639
612
// Schedule a timer that hides the element
640
613
await page . evaluate ( ( ) => setTimeout ( ( ) => button . style . display = 'none' , 0 ) ) ;
641
614
// Allow enough time for timer to fire
642
- await page . waitForTimeout ( 100 ) ;
615
+ await page . waitForTimeout ( 500 ) ;
643
616
} } ) ;
644
617
expect ( await page . evaluate ( ( ) => window . clicked ) ) . toBe ( true ) ;
645
618
} ) ;
646
619
it . fail ( CHROMIUM || FFOX ) ( 'should defer rafs' , async ( { page} ) => {
647
620
// This test requires pausing the page.
648
621
await page . setContent ( `<button id=button onclick="window.clicked=true">Click me</button>` ) ;
649
- await page . click ( 'button' , { __testHookSkipStablePosition : async ( ) => {
622
+ await page . click ( 'button' , { __testHookBeforeHitTarget : async ( ) => {
650
623
// Schedule a timer that hides the element
651
624
await page . evaluate ( ( ) => requestAnimationFrame ( ( ) => button . style . display = 'none' ) ) ;
652
625
// Allow enough time for raf to fire
653
- await page . waitForTimeout ( 100 ) ;
626
+ await page . waitForTimeout ( 500 ) ;
654
627
} } ) ;
655
628
expect ( await page . evaluate ( ( ) => window . clicked ) ) . toBe ( true ) ;
656
629
} ) ;
657
630
it . fail ( CHROMIUM || FFOX ) ( 'should defer fetch' , async ( { page, server} ) => {
658
631
// This test requires pausing the page.
659
632
await page . goto ( server . EMPTY_PAGE ) ;
660
633
await page . setContent ( `<button id=button onclick="window.clicked=true">Click me</button>` ) ;
661
- await page . click ( 'button' , { __testHookSkipStablePosition : async ( ) => {
634
+ await page . click ( 'button' , { __testHookBeforeHitTarget : async ( ) => {
662
635
// Fetch that would immediately delete button.
663
636
page . evaluate ( ( ) => fetch ( window . location . href ) . then ( ( ) => button . style . display = 'none' ) ) ;
664
637
// Allow enough time for raf to fire
665
- await page . waitForTimeout ( 100 ) ;
638
+ await page . waitForTimeout ( 500 ) ;
666
639
} } ) ;
667
640
expect ( await page . evaluate ( ( ) => window . clicked ) ) . toBe ( true ) ;
668
641
} ) ;
0 commit comments