Skip to content

Commit a8b31ca

Browse files
committed
Unify opening browser windows.
1 parent 85139d3 commit a8b31ca

15 files changed

+100
-80
lines changed

l10n_CM/Unified/test_demo_ad_email_phone_captured_in_doorhanger_and_stored.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ def test_demo_ad_email_phone_captured_in_doorhanger_and_stored(
4242
if expected_phone:
4343
with driver.context(driver.CONTEXT_CHROME):
4444
actual_phone = autofill_popup.get_element("address-doorhanger-phone").text
45-
normalize_expected = util.normalize_regional_phone_numbers(expected_phone, region)
45+
normalize_expected = util.normalize_regional_phone_numbers(
46+
expected_phone, region
47+
)
4648
normalized_actual = util.normalize_regional_phone_numbers(actual_phone, region)
4749
assert normalized_actual == normalize_expected, (
4850
f"Phone number mismatch for {region} | Expected: {normalize_expected}, Got: {normalized_actual}"

modules/page_base.py

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import os
44
import platform
55
import re
6+
import sys
67
import time
78
from copy import deepcopy
89
from pathlib import Path
@@ -678,20 +679,55 @@ def wait_for_num_tabs(self, num_tabs: int) -> Page:
678679

679680
def switch_to_new_tab(self) -> Page:
680681
"""Get list of all window handles, switch to the newly opened tab"""
681-
self.driver.switch_to.window(self.driver.window_handles[-1])
682+
with self.driver.context(self.driver.CONTEXT_CONTENT):
683+
self.driver.switch_to.window(self.driver.window_handles[-1])
682684
return self
683685

684686
def switch_to_new_window(self) -> Page:
685687
"""Switch to the most recently opened window. Can be a standard or private window"""
686-
all_window_handles = self.driver.window_handles
687-
self.driver.switch_to.window(all_window_handles[-1])
688+
with self.driver.context(self.driver.CONTEXT_CONTENT):
689+
all_window_handles = self.driver.window_handles
690+
self.driver.switch_to.window(all_window_handles[-1])
688691
return self
689692

690693
def wait_for_num_windows(self, num: int) -> Page:
691694
"""Wait for the number of open tabs + windows to equal given int"""
692695
with self.driver.context(self.driver.CONTEXT_CONTENT):
693696
return self.wait_for_num_tabs(num)
694697

698+
def open_and_switch_to_new_window(self, browser_window: str) -> Page:
699+
"""
700+
Opens a new browser window of the given type, then switches to it.
701+
702+
Parameters:
703+
browser_window: Can be a standard 'window', 'tab' or 'private' browser window.
704+
"""
705+
if browser_window == "private":
706+
self.open_and_switch_to_private_window()
707+
else:
708+
self.driver.switch_to.new_window(browser_window)
709+
return self
710+
711+
def open_and_switch_to_private_window(self) -> Page:
712+
"""
713+
Opens a new private browsing window via keyboard shortcut and switch to it
714+
"""
715+
# Keep track of window count to ensure we get a new one to switch to
716+
window_count = len(self.driver.window_handles)
717+
718+
with self.driver.context(self.driver.CONTEXT_CHROME):
719+
os_name = sys.platform
720+
mod_key = Keys.COMMAND if os_name == "darwin" else Keys.CONTROL
721+
self.actions.key_down(mod_key)
722+
self.actions.key_down(Keys.SHIFT)
723+
self.actions.send_keys("p")
724+
self.actions.key_up(Keys.SHIFT)
725+
self.actions.key_up(mod_key).perform()
726+
expected_window_count = window_count + 1
727+
self.wait_for_num_windows(expected_window_count)
728+
self.switch_to_new_window()
729+
return self
730+
695731
def switch_to_frame(self, frame: str, labels=[]) -> Page:
696732
"""Switch to inline document frame"""
697733
with self.driver.context(self.driver.CONTEXT_CHROME):

modules/util.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -499,15 +499,17 @@ def normalize_regional_phone_numbers(self, phone: str, region: str) -> str:
499499
digits = re.sub(r"\D", "", phone)
500500

501501
# Determine country code
502-
country_code = country_codes.get(region, "1") # Default to "1" (US/CA) if region is unknown
502+
country_code = country_codes.get(
503+
region, "1"
504+
) # Default to "1" (US/CA) if region is unknown
503505
local_number = digits
504506

505507
# Check if phone already contains a valid country code
506508
for code in country_codes.values():
507509
if digits.startswith(code):
508510
country_code = code
509511
# Remove country code from local number
510-
local_number = digits[len(code):]
512+
local_number = digits[len(code) :]
511513
break
512514

513515
# Handle leading zero in local numbers (France & Germany)

tests/bookmarks_and_history/test_opened_website_in_new_window_present_in_toolbar_history.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,8 @@ def test_the_website_opened_in_new_window_is_present_in_history_menu(driver: Fir
2727
for url in WEBSITES:
2828
GenericPage(driver, url=url).open()
2929

30-
tabs = TabBar(driver)
3130
panel_ui = PanelUi(driver)
32-
33-
panel_ui.open_panel_menu()
34-
panel_ui.select_panel_setting("panel-ui-new-window")
35-
tabs.wait_for_num_tabs(2)
36-
tabs.switch_to_new_window()
31+
panel_ui.open_and_switch_to_new_window("window")
3732

3833
page = GenericPage(driver, url=YOUTUBE_URL)
3934
page.open()

tests/bookmarks_and_history/test_private_window_website_not_in_history.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ def test_opened_website_in_private_window_not_captured_in_history_list(driver: F
1919
"""
2020

2121
panel_ui = PanelUi(driver)
22-
panel_ui.open_private_window()
23-
panel_ui.switch_to_new_window()
22+
panel_ui.open_and_switch_to_new_window("private")
2423

2524
GenericPage(driver, url=YOUTUBE_URL).open()
2625

tests/networking/test_http_site.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,18 @@ def set_prefs():
3131
def test_http_site(driver: Firefox):
3232
"""C2300294 Check that HTTP is allowed when appropriate"""
3333

34+
# Instantiate objects
35+
3436
# Basic functionality
3537
prefs = AboutPrefs(driver, category="privacy")
38+
nav = Navigation(driver)
39+
panel_ui = PanelUi(driver)
40+
41+
# Basic functionality
3642
prefs.open()
3743
prefs.select_https_only_setting(prefs.HTTPS_ONLY_STATUS.HTTPS_ONLY_DISABLED)
38-
driver.switch_to.new_window("tab")
44+
panel_ui.open_and_switch_to_new_window("tab")
3945
driver.get(HTTP_SITE)
40-
nav = Navigation(driver)
4146
nav.element_attribute_contains("lock-icon", "tooltiptext", CONNECTION_NOT_SECURE)
4247

4348
# Blocking
@@ -58,9 +63,8 @@ def test_http_site(driver: Firefox):
5863
nav.element_attribute_contains("lock-icon", "tooltiptext", CONNECTION_NOT_SECURE)
5964

6065
# Private browsing - blocked
61-
hamburger = PanelUi(driver)
62-
hamburger.open_private_window()
63-
nav.switch_to_new_window()
66+
panel_ui.open_and_switch_to_new_window("private")
67+
6468
try:
6569
driver.get(HTTP_SITE)
6670
assert "badssl" not in driver.current_url, "Site should not be displayed"

tests/scrolling_panning_zooming/test_zoom_text_only.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,16 @@ def test_zoom_text_only_from_settings(
9797
"""
9898
# Initializing objects
9999
nav = Navigation(driver)
100+
panel_ui = PanelUi(driver)
100101

101102
# Save the original positions of elements for comparison
102-
driver.switch_to.new_window("tab")
103+
panel_ui.open_and_switch_to_new_window("tab")
103104
nav.search(WEBSITE_2)
104105
web_page.wait.until(lambda _: web_page.title_contains("DuckDuckGo"))
105106
original_positions = save_original_positions(driver, web_page)
106107

107108
# Set the pref to zoom text only
108-
driver.switch_to.new_window("tab")
109+
panel_ui.open_and_switch_to_new_window("tab")
109110
about_prefs = AboutPrefs(driver, category="General").open()
110111
about_prefs.click_on("zoom-text-only")
111112

@@ -132,15 +133,16 @@ def test_zoom_text_only_after_restart(
132133
"""
133134
# Initializing objects
134135
nav = Navigation(driver)
136+
panel_ui = PanelUi(driver)
135137

136138
# Save the original positions of elements for comparison
137-
driver.switch_to.new_window("tab")
139+
panel_ui.open_and_switch_to_new_window("tab")
138140
nav.search(WEBSITE_2)
139141
web_page.wait.until(lambda _: web_page.title_contains("DuckDuckGo"))
140142
original_positions = save_original_positions(driver, web_page)
141143

142144
# Set default zoom level
143-
driver.switch_to.new_window("tab")
145+
panel_ui.open_and_switch_to_new_window("tab")
144146
about_prefs = AboutPrefs(driver, category="General").open()
145147
about_prefs.set_default_zoom_level(110)
146148

tests/security_and_privacy/test_cookies_not_saved_private_browsing.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,11 @@ def test_cookies_not_saved_private_browsing(driver: Firefox):
1818
# Instantiate objs
1919
about_prefs = AboutPrefs(driver, category="privacy")
2020
panel_ui = PanelUi(driver)
21-
nav = Navigation(driver)
2221
google_search = GoogleSearch(driver)
2322
ba = BrowserActions(driver)
2423

2524
# Open new private window
26-
panel_ui.open_private_window()
27-
nav.switch_to_new_window()
25+
panel_ui.open_and_switch_to_new_window("private")
2826

2927
# Open the Google page and perform a search
3028
google_search.open()

tests/security_and_privacy/test_downloads_from_private_not_leaked.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,10 @@ def test_downloads_from_private_not_leaked(driver: Firefox, delete_files, screen
3535

3636
# We've deleted relevant downloads_file just to be safe
3737
non_private_window = driver.current_window_handle
38-
panelui = PanelUi(driver)
39-
panelui.open_panel_menu()
40-
panelui.select_panel_setting("new-private-window-option")
41-
38+
panel_ui = PanelUi(driver)
4239
nav = Navigation(driver)
43-
nav.switch_to_new_window()
40+
41+
panel_ui.open_and_switch_to_new_window("private")
4442

4543
about_downloads = AboutDownloads(driver)
4644
about_downloads.open()

tests/security_and_privacy/test_https_enabled_private_browsing.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from selenium.webdriver import Firefox
33
from selenium.webdriver.support.wait import WebDriverWait
44

5-
from modules.browser_object import Navigation, PanelUi
5+
from modules.browser_object import PanelUi
66
from modules.page_object import AboutPrefs
77

88

@@ -19,15 +19,15 @@ def test_https_first_mode_in_private_browsing(driver: Firefox):
1919
C1362731 Check that https First Mode is properly enabled and working in Private Browsing
2020
"""
2121

22-
# Navigate to the HTTP Site in a Private Window
22+
# Instantiate objects
2323
prefs = AboutPrefs(driver, category="privacy")
24+
panel_ui = PanelUi(driver)
25+
26+
# Navigate to the HTTP Site in a Private Window
2427
prefs.open()
2528
prefs.select_https_only_setting(prefs.HTTPS_ONLY_STATUS.HTTPS_ONLY_PRIVATE)
26-
hamburger = PanelUi(driver)
27-
hamburger.open_private_window()
28-
29-
nav = Navigation(driver)
30-
nav.switch_to_new_window()
29+
panel_ui.open_and_switch_to_new_window("private")
30+
driver.get("about:blank")
3131
driver.get(HTTP_SITE)
3232

3333
# Wait for the URL to be redirected to HTTPS

0 commit comments

Comments
 (0)