From a5d73f59beaa21fc1c6f67f0539ab4374bc3d67d Mon Sep 17 00:00:00 2001 From: Ben Chatterton Date: Tue, 2 Dec 2025 14:54:23 -0800 Subject: [PATCH 1/3] try autopy --- Pipfile | 1 + tests/tabs/test_play_mute_unmute_tabs_via_toggle.py | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Pipfile b/Pipfile index 94087ec5b..88f965bca 100644 --- a/Pipfile +++ b/Pipfile @@ -25,6 +25,7 @@ google-auth = "2.32.0" psutil = "<6.1" pytest-json-report = "==1.5.0" beautifulsoup4 = "4.12.3" +autopy = "*" [dev-packages] werkzeug = "==3.0.3" diff --git a/tests/tabs/test_play_mute_unmute_tabs_via_toggle.py b/tests/tabs/test_play_mute_unmute_tabs_via_toggle.py index dd619f8a3..8858f4eca 100644 --- a/tests/tabs/test_play_mute_unmute_tabs_via_toggle.py +++ b/tests/tabs/test_play_mute_unmute_tabs_via_toggle.py @@ -1,7 +1,7 @@ from time import sleep +import autopy import pytest -from pynput.mouse import Button, Controller from selenium.webdriver import Firefox from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys @@ -32,7 +32,6 @@ def test_play_mute_unmute_tabs_via_toggle(driver: Firefox, sys_platform: str): """ tabs = TabBar(driver) context_menu = ContextMenu(driver) - mouse = Controller() wait = WebDriverWait(driver, 10) DELAY = 2 POSITION_DELAY = 0.3 @@ -99,9 +98,9 @@ def click_multi_tab_audio_button(): + chrome_height ) # Offset to click on the audio control area (left side of tab) - mouse.position = (element_x - 75, element_y) + autopy.mouse.smooth_move(element_x - 75, element_y) sleep(POSITION_DELAY) # Small delay for mouse positioning - mouse.click(Button.left, 1) + autopy.mouse.click(autopy.mouse.Button.LEFT) sleep(DELAY) # Wait for action to take effect # Click Play button From e0eccb6b891f7d01749a97872f61cb2b83689731 Mon Sep 17 00:00:00 2001 From: Ben Chatterton Date: Wed, 3 Dec 2025 15:38:41 -0800 Subject: [PATCH 2/3] run pdf image test in linux with autopy --- manifests/incident.yaml | 1 - manifests/key.yaml | 9 +++-- modules/browser_object_reader_view.py | 4 +- modules/page_object_generics.py | 19 ++++------ .../test_bing_search_codes.py | 37 +++++++++++++++++++ .../test_play_mute_unmute_tabs_via_toggle.py | 7 ++-- 6 files changed, 56 insertions(+), 21 deletions(-) create mode 100644 tests/address_bar_and_search/test_bing_search_codes.py diff --git a/manifests/incident.yaml b/manifests/incident.yaml index 774f2c3d4..ac5defe79 100644 --- a/manifests/incident.yaml +++ b/manifests/incident.yaml @@ -116,7 +116,6 @@ profile: - test_set_default_profile reader_view: - test_improved_type_control_panel -- test_reader_view_location_bar scrolling_panning_zooming: - test_default_zoom_persists - test_mouse_wheel_zoom diff --git a/manifests/key.yaml b/manifests/key.yaml index a9732db04..b061c45e0 100644 --- a/manifests/key.yaml +++ b/manifests/key.yaml @@ -24,6 +24,10 @@ address_bar_and_search: result: pass splits: - functional1 + test_bing_search_codes: + result: pass + splits: + - functional1 test_copied_url_contains_https: result: pass splits: @@ -748,10 +752,7 @@ password_manager: - ci-extended pdf_viewer: test_add_image_pdf: - result: - linux: unstable - mac: pass - win: pass + result: pass splits: - smoke test_download_pdf_with_form_fields: diff --git a/modules/browser_object_reader_view.py b/modules/browser_object_reader_view.py index 0d4ffdd24..a956b5ac6 100644 --- a/modules/browser_object_reader_view.py +++ b/modules/browser_object_reader_view.py @@ -40,13 +40,13 @@ def open_reader_view_keys(self) -> BasePage: self.wait_for_reader_view_open() return self + @BasePage.context_chrome def close_reader_view_searchbar(self) -> BasePage: """ Closes the reader view using the search bar """ before_page_source = self.driver.page_source - with self.driver.context(self.driver.CONTEXT_CHROME): - self.get_element("reader-view-button").click() + self.get_element("reader-view-button").click() self.wait.until(lambda _: self.driver.page_source != before_page_source) self.wait_for_reader_view_closed() return self diff --git a/modules/page_object_generics.py b/modules/page_object_generics.py index 786fc7ed1..7c27a9de0 100644 --- a/modules/page_object_generics.py +++ b/modules/page_object_generics.py @@ -170,27 +170,24 @@ def add_image(self, image_path: str, sys_platform: str) -> BasePage: self.get_element("toolbar-add-image").click() self.get_element("toolbar-add-image-confirm").click() sleep(1.5) - from pynput.keyboard import Controller, Key + import autopy - keyboard = Controller() if sys_platform == "Darwin" or sys_platform == "Linux": - keyboard.type("/") + autopy.key.tap("/") sleep(1.5) - keyboard.type(image_path.lstrip("/")) + autopy.key.type_string(image_path.lstrip("/"), wpm=90) else: sleep(1.5) - keyboard.type(image_path) + autopy.key.type_string(image_path, wpm=90) sleep(1) - keyboard.press(Key.enter) - keyboard.release(Key.enter) + autopy.key.tap(autopy.key.Code.RETURN) sleep(1) - keyboard.press(Key.enter) - keyboard.release(Key.enter) + autopy.key.tap(autopy.key.Code.RETURN) sleep(1.5) for _ in range(3): - keyboard.tap(Key.tab) + autopy.key.tap(autopy.key.Code.TAB) sleep(0.5) - keyboard.tap(Key.enter) + autopy.key.tap(autopy.key.Code.RETURN) sleep(1) return self diff --git a/tests/address_bar_and_search/test_bing_search_codes.py b/tests/address_bar_and_search/test_bing_search_codes.py new file mode 100644 index 000000000..3b5e28f86 --- /dev/null +++ b/tests/address_bar_and_search/test_bing_search_codes.py @@ -0,0 +1,37 @@ +import pytest +from selenium.webdriver import Firefox + +from modules.browser_object import Navigation, TabBar +from modules.page_object import AboutPrefs + +SEARCH_ENGINE = "Bing" +SEARCH_TERM = "earth" +TAB_TITLE = f"{SEARCH_TERM} - Search" +BING_CODES = ["form=MOZLBR&pc=MOZI", "pc=MOZI&form=MOZLBR"] + + +@pytest.fixture() +def test_case(): + return "3029767" + + +def test_bing_search_codes(driver: Firefox): + """ + C3029767 - Verify that Search Code Testing: Bing - US is correctly displayed and functional. + """ + nav = Navigation(driver) + prefs = AboutPrefs(driver) + tab = TabBar(driver) + + # Go to search engine settings + nav.open_searchmode_switcher_settings() + + # Change the default search engine + prefs.search_engine_dropdown().select_option(SEARCH_ENGINE) + + # Open a tab and verify Bing search code + driver.get("about:newtab") + nav.search(SEARCH_TERM) + tab.expect_title_contains(TAB_TITLE) + assert any(code in driver.current_url for code in BING_CODES) + nav.clear_awesome_bar() diff --git a/tests/tabs/test_play_mute_unmute_tabs_via_toggle.py b/tests/tabs/test_play_mute_unmute_tabs_via_toggle.py index 8858f4eca..dd619f8a3 100644 --- a/tests/tabs/test_play_mute_unmute_tabs_via_toggle.py +++ b/tests/tabs/test_play_mute_unmute_tabs_via_toggle.py @@ -1,7 +1,7 @@ from time import sleep -import autopy import pytest +from pynput.mouse import Button, Controller from selenium.webdriver import Firefox from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys @@ -32,6 +32,7 @@ def test_play_mute_unmute_tabs_via_toggle(driver: Firefox, sys_platform: str): """ tabs = TabBar(driver) context_menu = ContextMenu(driver) + mouse = Controller() wait = WebDriverWait(driver, 10) DELAY = 2 POSITION_DELAY = 0.3 @@ -98,9 +99,9 @@ def click_multi_tab_audio_button(): + chrome_height ) # Offset to click on the audio control area (left side of tab) - autopy.mouse.smooth_move(element_x - 75, element_y) + mouse.position = (element_x - 75, element_y) sleep(POSITION_DELAY) # Small delay for mouse positioning - autopy.mouse.click(autopy.mouse.Button.LEFT) + mouse.click(Button.left, 1) sleep(DELAY) # Wait for action to take effect # Click Play button From 5dd6df16c56a02487b68ee114e7ba8a3d77b7083 Mon Sep 17 00:00:00 2001 From: Ben Chatterton Date: Thu, 4 Dec 2025 08:16:29 -0800 Subject: [PATCH 3/3] slow down on win --- modules/page_object_generics.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/page_object_generics.py b/modules/page_object_generics.py index 7c27a9de0..13febc63a 100644 --- a/modules/page_object_generics.py +++ b/modules/page_object_generics.py @@ -178,7 +178,7 @@ def add_image(self, image_path: str, sys_platform: str) -> BasePage: autopy.key.type_string(image_path.lstrip("/"), wpm=90) else: sleep(1.5) - autopy.key.type_string(image_path, wpm=90) + autopy.key.type_string(image_path, wpm=50) sleep(1) autopy.key.tap(autopy.key.Code.RETURN) sleep(1)