11
11
from typing import List , Union
12
12
13
13
from pynput .keyboard import Controller , Key
14
- from pynput .mouse import Button , Controller as MouseController
14
+ from pynput .mouse import Button
15
+ from pynput .mouse import Controller as MouseController
15
16
from pypom import Page
16
17
from selenium .common import NoAlertPresentException
17
18
from selenium .common .exceptions import (
@@ -564,7 +565,9 @@ def triple_click(self, reference: Union[str, tuple, WebElement], labels=[]) -> P
564
565
"""Actions helper: perform triple-click on a given element"""
565
566
return self .multi_click (3 , reference , labels )
566
567
567
- def control_click (self , reference : Union [str , tuple , WebElement ], labels = []) -> Page :
568
+ def control_click (
569
+ self , reference : Union [str , tuple , WebElement ], labels = []
570
+ ) -> Page :
568
571
"""Actions helper: perform control-click on given element"""
569
572
element = self .fetch (reference , labels )
570
573
if self .sys_platform () == "Darwin" :
@@ -574,10 +577,9 @@ def control_click(self, reference: Union[str, tuple, WebElement], labels=[]) ->
574
577
self .actions .key_down (mod_key ).click (element ).key_up (mod_key ).perform ()
575
578
return self
576
579
577
- def middle_click (self , reference : Union [str , tuple , WebElement ], labels = []):
578
- """Perform a middle mouse click on desired element"""
579
- with self .driver .context (self .driver .CONTEXT_CONTENT ):
580
- self .driver .maximize_window ()
580
+ def middle_click (self , reference : Union [str , tuple , WebElement ], labels = []):
581
+ """Actions helper: Perform a middle mouse click on desired element"""
582
+ with self .driver .context (self .context_id ):
581
583
mouse = MouseController ()
582
584
element = self .fetch (reference , labels )
583
585
@@ -589,14 +591,24 @@ def middle_click(self, reference: Union[str, tuple, WebElement], labels =[]):
589
591
outer_height = self .driver .execute_script ("return window.outerHeight;" )
590
592
chrome_height = outer_height - inner_height
591
593
592
- element_x = window_position ['x' ] + element_location ['x' ] + (element_size ['width' ] / 2 )
593
- element_y = window_position ['y' ] + element_location ['y' ] + (element_size ['height' ] / 2 ) + chrome_height
594
+ element_x = (
595
+ window_position ["x" ]
596
+ + element_location ["x" ]
597
+ + (element_size ["width" ] / 2 )
598
+ )
599
+ element_y = (
600
+ window_position ["y" ]
601
+ + element_location ["y" ]
602
+ + (element_size ["height" ] / 2 )
603
+ + chrome_height
604
+ )
594
605
mouse .position = (element_x , element_y )
595
606
596
- time .sleep (1 )
607
+ # Need a short wait to ensure the mouse move completes, then middle click
608
+ time .sleep (0.5 )
597
609
mouse .click (Button .middle , 1 )
598
610
return self
599
-
611
+
600
612
def context_click (
601
613
self , reference : Union [str , tuple , WebElement ], labels = []
602
614
) -> Page :
0 commit comments