Skip to content

Commit abcbab6

Browse files
committed
Rework and fix test
1 parent 455614d commit abcbab6

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

modules/page_base.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from typing import List, Union
1212

1313
from pynput.keyboard import Controller, Key
14+
from pynput.mouse import Button, Controller
1415
from pypom import Page
1516
from selenium.common import NoAlertPresentException
1617
from selenium.common.exceptions import (
@@ -558,6 +559,39 @@ def triple_click(self, reference: Union[str, tuple, WebElement], labels=[]) -> P
558559
"""Actions helper: perform triple-click on a given element"""
559560
return self.multi_click(3, reference, labels)
560561

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 = Controller()
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+
561595
def context_click(
562596
self, reference: Union[str, tuple, WebElement], labels=[]
563597
) -> Page:
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import pytest
2+
from selenium.webdriver import Firefox
3+
from selenium.webdriver.common.by import By
4+
5+
from modules.page_object import ExamplePage
6+
7+
8+
@pytest.fixture()
9+
def test_case():
10+
return "134455"
11+
12+
13+
@pytest.mark.headed
14+
def test_open_new_bg_tab_via_mouse_and_keyboard(driver: Firefox):
15+
"""
16+
C134455 - Verify that opening hyperlink with mouse or keyboard
17+
shortcuts creates new background tabs
18+
"""
19+
20+
test_url = "https://www.iana.org/help/example-domains"
21+
example = ExamplePage(driver).open()
22+
23+
# Middle click link, verify new background tab opens with correct URL
24+
example.middle_click("more-information")
25+
example.wait_for_num_tabs(2)
26+
example.switch_to_new_tab()
27+
28+
assert driver.current_url == test_url
29+
30+
# Close new tab, switch back to original example page
31+
driver.close()
32+
example.switch_to_new_tab()
33+
34+
# Control click link, verify new background tab opens with correct URL
35+
example.control_click("more-information")
36+
example.wait_for_num_tabs(2)
37+
example.switch_to_new_tab()
38+
39+
assert driver.current_url == test_url

0 commit comments

Comments
 (0)