|
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 | 15 | from pypom import Page
|
15 | 16 | from selenium.common import NoAlertPresentException
|
16 | 17 | from selenium.common.exceptions import (
|
@@ -558,6 +559,39 @@ def triple_click(self, reference: Union[str, tuple, WebElement], labels=[]) -> P
|
558 | 559 | """Actions helper: perform triple-click on a given element"""
|
559 | 560 | return self.multi_click(3, reference, labels)
|
560 | 561 |
|
| 562 | + def control_click(self, reference: Union[str, tuple, WebElement], labels=[]) -> Page: |
| 563 | + """Actions helper: perform control-click on given element""" |
| 564 | + element = self.fetch(reference, labels) |
| 565 | + if self.sys_platform() == "Darwin": |
| 566 | + mod_key = Keys.COMMAND |
| 567 | + else: |
| 568 | + mod_key = Keys.CONTROL |
| 569 | + self.actions.key_down(mod_key).click(element).key_up(mod_key).perform() |
| 570 | + return self |
| 571 | + |
| 572 | + def middle_click(self, reference: Union[str, tuple, WebElement], labels =[]): |
| 573 | + """Perform a middle mouse click on desired element""" |
| 574 | + with self.driver.context(self.driver.CONTEXT_CONTENT): |
| 575 | + self.driver.maximize_window() |
| 576 | + mouse = MouseController() |
| 577 | + element = self.fetch(reference, labels) |
| 578 | + |
| 579 | + element_location = element.location |
| 580 | + element_size = element.size |
| 581 | + window_position = self.driver.get_window_position() |
| 582 | + |
| 583 | + inner_height = self.driver.execute_script("return window.innerHeight;") |
| 584 | + outer_height = self.driver.execute_script("return window.outerHeight;") |
| 585 | + chrome_height = outer_height - inner_height |
| 586 | + |
| 587 | + element_x = window_position['x'] + element_location['x'] + (element_size['width'] / 2) |
| 588 | + element_y = window_position['y'] + element_location['y'] + (element_size['height'] / 2) + chrome_height |
| 589 | + mouse.position = (element_x, element_y) |
| 590 | + |
| 591 | + time.sleep(1) |
| 592 | + mouse.click(Button.middle, 1) |
| 593 | + return self |
| 594 | + |
561 | 595 | def context_click(
|
562 | 596 | self, reference: Union[str, tuple, WebElement], labels=[]
|
563 | 597 | ) -> Page:
|
|
0 commit comments