From 579e7bf82c9ce7ed3444f6f3fb5b6b0154f1fdb7 Mon Sep 17 00:00:00 2001 From: Sangie Date: Tue, 19 Aug 2025 21:20:01 -0400 Subject: [PATCH 1/3] test 1976523 passed locally --- Pipfile | 2 +- modules/browser_object_navigation.py | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Pipfile b/Pipfile index 94087ec5b..a2c46914a 100644 --- a/Pipfile +++ b/Pipfile @@ -11,7 +11,6 @@ pytest = "<8.4" pytest-httpserver = "1.0.12" requests = "<3.0" pytest-xdist = "3.6.1" -pytest-html = "4.1.1" pypom = "2.2.4" taskcluster-taskgraph = "==9.0.0" jsonpath-ng = "1.6.1" @@ -25,6 +24,7 @@ google-auth = "2.32.0" psutil = "<6.1" pytest-json-report = "==1.5.0" beautifulsoup4 = "4.12.3" +pytest-html = "*" [dev-packages] werkzeug = "==3.0.3" diff --git a/modules/browser_object_navigation.py b/modules/browser_object_navigation.py index ad0c64467..b8194a7d5 100644 --- a/modules/browser_object_navigation.py +++ b/modules/browser_object_navigation.py @@ -597,10 +597,17 @@ def open_bookmark_in_new_tab_via_context_menu( Argument: bookmark_title: The title of the bookmark to open """ - # Right-click the bookmark and open it in new tabe via context menu item + # Right-click the bookmark to make the menu appear self.panel_ui.element_clickable("bookmark-by-title", labels=[bookmark_title]) self.panel_ui.context_click("bookmark-by-title", labels=[bookmark_title]) - self.context_menu.click_on("context-menu-toolbar-open-in-new-tab") + + # Find the menu item we want to click + # We use .fetch() here to get the element without clicking it yet + menu_item = self.context_menu.fetch("context-menu-toolbar-open-in-new-tab") + + # Use ActionChains to perform a more reliable click + actions = ActionChains(self.driver) + actions.move_to_element(menu_item).click().perform() return self From c9c437b09c97ec32bd97831e417836c3ab906c18 Mon Sep 17 00:00:00 2001 From: Sangie Date: Wed, 20 Aug 2025 17:39:43 -0400 Subject: [PATCH 2/3] test 1976523 passed with project's latest main merged --- Pipfile | 2 +- l10n_CM/run_l10n.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Pipfile b/Pipfile index a2c46914a..94087ec5b 100644 --- a/Pipfile +++ b/Pipfile @@ -11,6 +11,7 @@ pytest = "<8.4" pytest-httpserver = "1.0.12" requests = "<3.0" pytest-xdist = "3.6.1" +pytest-html = "4.1.1" pypom = "2.2.4" taskcluster-taskgraph = "==9.0.0" jsonpath-ng = "1.6.1" @@ -24,7 +25,6 @@ google-auth = "2.32.0" psutil = "<6.1" pytest-json-report = "==1.5.0" beautifulsoup4 = "4.12.3" -pytest-html = "*" [dev-packages] werkzeug = "==3.0.3" diff --git a/l10n_CM/run_l10n.py b/l10n_CM/run_l10n.py index ad4ab8afa..82973acc8 100644 --- a/l10n_CM/run_l10n.py +++ b/l10n_CM/run_l10n.py @@ -98,6 +98,13 @@ "zalando", "zara", "zooplus", + "zara", + "cocolita", + "torfs", + "standaardboekhandel", + "douglas", + "brico", + "toychamp", } loaded_valid_sites = valid_l10n_mappings().keys() From ea65735cc9d540c4e951bd2bd9b325b0610fffc3 Mon Sep 17 00:00:00 2001 From: Sangie Date: Tue, 30 Sep 2025 16:11:42 -0400 Subject: [PATCH 3/3] local changes before merging --- modules/page_base.py | 16 ++++ .../test_change_position_of_pinned_tabs.py | 83 +++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 tests/tabs/test_change_position_of_pinned_tabs.py diff --git a/modules/page_base.py b/modules/page_base.py index e1d4fca55..c231c9522 100644 --- a/modules/page_base.py +++ b/modules/page_base.py @@ -305,6 +305,22 @@ def get_element( cache_name = f"{name}{labelscode}" if cache_name not in self.elements: self.elements[cache_name] = deepcopy(self.elements[name]) + # FIX: Check for doNotCache BEFORE trying to use cached elements + if ( + not multiple + and "doNotCache" + not in self.elements[cache_name]["groups"] # ADD THIS CHECK + and "seleniumObject" in self.elements[cache_name] + ): + # no caching for multiples + cached_element = self.elements[cache_name]["seleniumObject"] + try: + self.instawait.until_not(EC.staleness_of(cached_element)) + logging.info(f"Returned {cache_name} from object cache!") + return self.elements[cache_name]["seleniumObject"] + except (TimeoutError, TimeoutException): + # Because we have a timeout of 0, this should not cause delays + pass if multiple: logging.info(f"Multiples: Not caching {cache_name}...") if not multiple and "seleniumObject" in self.elements[cache_name]: diff --git a/tests/tabs/test_change_position_of_pinned_tabs.py b/tests/tabs/test_change_position_of_pinned_tabs.py new file mode 100644 index 000000000..b830d862b --- /dev/null +++ b/tests/tabs/test_change_position_of_pinned_tabs.py @@ -0,0 +1,83 @@ +import logging +import time + +import pytest +from selenium.webdriver import Firefox +from selenium.webdriver.common.action_chains import ActionChains +from selenium.webdriver.common.by import By + +from modules.browser_object import ContextMenu, Navigation, TabBar + + +@pytest.fixture() +def test_case(): + return "134723" + + +def test_change_position_of_pinned_tabs(driver: Firefox): + tabs = TabBar(driver) + nav = Navigation(driver) + tabs_context_menu = ContextMenu(driver) + num_tabs = 5 + + tab_titles = [] + url_list = [ + "https://www.google.com", + "https://www.youtube.com", + "https://www.mozilla.org", + "https://www.wikipedia.org", + "https://www.github.com", + ] + + driver.get(url_list[0]) + tab_titles.append(driver.title) + + # Open 5 tabs + for i in range(1, len(url_list)): + tabs.new_tab_by_button() + driver.switch_to.window(driver.window_handles[-1]) + driver.get(url_list[i]) + tab_titles.append(driver.title) + time.sleep(2) + + # specific tabs we want to work with + google_title = tab_titles[0] + mozilla_title = tab_titles[2] + + # Pin the 'Google' tab by its title + driver.switch_to.window(driver.window_handles[0]) + google_tab = tabs.get_tab(google_title) + assert google_tab is not None, "Google tab should exist" + tabs.context_click(google_tab) + tabs_context_menu.click_context_item("context-menu-pin-tab") + time.sleep(1) + + # FIX: Re-initialize the context menu object after the DOM has changed. + # FIX: Force a "context reset" by switching to a neutral tab. + driver.switch_to.window(driver.window_handles[1]) # Switch to YouTube + time.sleep(0.5) # A brief pause to ensure the context switch completes + tabs_context_menu = ContextMenu(driver) + + # Pin the 'Mozilla' tab by its title + driver.switch_to.window(driver.window_handles[2]) + mozilla_tab = tabs.get_tab(mozilla_title) + assert mozilla_tab is not None, "Mozilla tab should exist" + tabs.context_click(mozilla_tab) + tabs_context_menu.click_context_item("context-menu-pin-tab") + time.sleep(1) + + driver.switch_to.window(driver.window_handles[0]) + pinned_tab_one = tabs.get_tab(google_title) + assert tabs.is_pinned(pinned_tab_one) + + # ERROR + # pinned_tab_two = tabs.get_tab(mozilla_title) + # assert tabs.is_pinned(pinned_tab_two) + + # -----------------------after pinned error is fixed ------------------------------------ + # actions = ActionChains(driver) + # # A more robust, manual way to perform a drag-and-drop + # actions.drag_and_drop(pinned_tab_one, pinned_tab_two).perform() + + # assert tab_titles[0] in new_pinned_tab_one.text, "Google should now be the first pinned tab" + # assert tab_titles[2] in new_pinned_tab_two.text, "Mozilla should now be the second pinned tab"