Skip to content

Commit 0f7afde

Browse files
authored
Merge pull request #488 from mozilla/tracy/unify-open-switch-to-window
Unify opening browser windows.
2 parents a7d3388 + a2fe6f1 commit 0f7afde

20 files changed

+128
-96
lines changed

l10n_CM/Unified/test_demo_ad_email_phone_captured_in_doorhanger_and_stored.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,17 @@ def test_demo_ad_email_phone_captured_in_doorhanger_and_stored(
3838

3939
# containing phone field
4040
expected_phone = address_autofill_data.telephone
41-
actual_phone = autofill_popup.get_cc_doorhanger_data("address-doorhanger-phone")
42-
normalize_expected = util.normalize_regional_phone_numbers(expected_phone, region)
43-
normalized_actual = util.normalize_regional_phone_numbers(actual_phone, region)
44-
assert normalized_actual == normalize_expected, (
45-
f"Phone number mismatch for {region} | Expected: {normalize_expected}, Got: {normalized_actual}"
46-
)
41+
# Skip verification if phone number isn't provided
42+
if expected_phone:
43+
with driver.context(driver.CONTEXT_CHROME):
44+
actual_phone = autofill_popup.get_element("address-doorhanger-phone").text
45+
normalize_expected = util.normalize_regional_phone_numbers(
46+
expected_phone, region
47+
)
48+
normalized_actual = util.normalize_regional_phone_numbers(actual_phone, region)
49+
assert normalized_actual == normalize_expected, (
50+
f"Phone number mismatch for {region} | Expected: {normalize_expected}, Got: {normalized_actual}"
51+
)
4752

4853
# Click the "Save" button
4954
autofill_popup.click_doorhanger_button("save")

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_via_keyboard()
707+
else:
708+
self.driver.switch_to.new_window(browser_window)
709+
return self
710+
711+
def open_and_switch_to_private_window_via_keyboard(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):

tests/bookmarks_and_history/test_clear_all_history.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ def test_clear_all_history(driver: Firefox):
2020
"""
2121
C172045: Verify that the user can Clear all the History
2222
"""
23-
panel_ui = PanelUi(driver).open()
23+
panel_ui = PanelUi(driver)
24+
panel_ui.open()
2425
gen_page = GenericPage(driver)
2526
panel_ui.open_history_menu()
2627
ba = BrowserActions(driver)

tests/bookmarks_and_history/test_clear_recent_history_displayed.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ def test_clear_recent_history_displayed(driver: Firefox):
1313
"""
1414
C172043: Clear recent history panel displayed
1515
"""
16-
panel_ui = PanelUi(driver).open()
16+
panel_ui = PanelUi(driver)
17+
panel_ui.open()
1718

1819
panel_ui.open_panel_menu()
1920
with driver.context(driver.CONTEXT_CHROME):

tests/bookmarks_and_history/test_open_websites_from_history.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ def test_open_websites_from_history(driver: Firefox):
2929
"""
3030
C118807: Verify that the user can open websites from the Toolbar History submenu
3131
"""
32-
panel_ui = PanelUi(driver).open()
32+
panel_ui = PanelUi(driver)
33+
panel_ui.open()
3334

3435
panel_ui.open_history_menu()
3536

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_opened_website_present_in_toolbar_history.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ def test_the_most_recent_website_is_present_in_history_menu(driver: Firefox):
2626
for url in WEBSITES:
2727
GenericPage(driver, url=url).open()
2828

29-
panel_ui = PanelUi(driver).open()
29+
panel_ui = PanelUi(driver)
30+
panel_ui.open()
3031
panel_ui.open_history_menu()
3132

3233
# Verify YouTube is present in the history menu and is on top of the list as the most recent website visited

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

0 commit comments

Comments
 (0)