Skip to content

Commit eb4354c

Browse files
authored
Add Smoke Test for Tabs (#718)
* Rework and fix test * Fix: linting errors for page_base & test_open_new_bg_tab_via_mouse_and_keyboard
1 parent d1e9c84 commit eb4354c

File tree

2 files changed

+72
-0
lines changed

2 files changed

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

0 commit comments

Comments
 (0)