1111from typing import List , Union
1212
1313from 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
1516from pypom import Page
1617from selenium .common import NoAlertPresentException
1718from selenium .common .exceptions import (
@@ -564,7 +565,9 @@ def triple_click(self, reference: Union[str, tuple, WebElement], labels=[]) -> P
564565 """Actions helper: perform triple-click on a given element"""
565566 return self .multi_click (3 , reference , labels )
566567
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 :
568571 """Actions helper: perform control-click on given element"""
569572 element = self .fetch (reference , labels )
570573 if self .sys_platform () == "Darwin" :
@@ -574,10 +577,9 @@ def control_click(self, reference: Union[str, tuple, WebElement], labels=[]) ->
574577 self .actions .key_down (mod_key ).click (element ).key_up (mod_key ).perform ()
575578 return self
576579
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 ):
581583 mouse = MouseController ()
582584 element = self .fetch (reference , labels )
583585
@@ -589,14 +591,24 @@ def middle_click(self, reference: Union[str, tuple, WebElement], labels =[]):
589591 outer_height = self .driver .execute_script ("return window.outerHeight;" )
590592 chrome_height = outer_height - inner_height
591593
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+ )
594605 mouse .position = (element_x , element_y )
595606
596- time .sleep (1 )
607+ # Need a short wait to ensure the mouse move completes, then middle click
608+ time .sleep (0.5 )
597609 mouse .click (Button .middle , 1 )
598610 return self
599-
611+
600612 def context_click (
601613 self , reference : Union [str , tuple , WebElement ], labels = []
602614 ) -> Page :
0 commit comments