From 1848768156ad1afc4be5d9ae27752c2aedc16cb1 Mon Sep 17 00:00:00 2001 From: Hani Yacoub Date: Thu, 4 Dec 2025 13:12:12 +0200 Subject: [PATCH 01/11] Test --- ...archengine_result_page_load_on_reload_or_back.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py diff --git a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py new file mode 100644 index 000000000..e4d68f9b0 --- /dev/null +++ b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py @@ -0,0 +1,13 @@ +import pytest +from selenium.webdriver import Firefox + + +@pytest.fixture() +def test_case(): + return "3028909" + + +def test_searchengine_result_page_load_on_reload_or_back(driver: Firefox): + """ + C3028909 - Search Engine Result Page loads as a result of a reload or a back-button press + """ \ No newline at end of file From ef668e0163f684ec264c49b1e541f601e78f7b85 Mon Sep 17 00:00:00 2001 From: Hani Yacoub Date: Fri, 5 Dec 2025 17:11:59 +0200 Subject: [PATCH 02/11] Test searchengine result page load on reload and back --- SELECTOR_INFO.md | 7 +++ modules/browser_object_navigation.py | 12 +++++ modules/data/navigation.components.json | 8 +++ modules/page_object_about_pages.py | 17 ++++++ .../test_google_search_counts_us.py | 4 +- .../test_google_withads_url_bar_us.py | 4 +- .../test_sap_google_adclick.py | 4 +- ...gine_result_page_load_on_reload_or_back.py | 54 ++++++++++++++++++- 8 files changed, 100 insertions(+), 10 deletions(-) diff --git a/SELECTOR_INFO.md b/SELECTOR_INFO.md index d6fb764de..3de510311 100644 --- a/SELECTOR_INFO.md +++ b/SELECTOR_INFO.md @@ -3308,6 +3308,13 @@ Description: Switch to tab from awesome bar Location: Address bar Path to .json: modules/data/navigation.components.json ``` +``` +Selector Name: back-button +Selector Data: back-button +Description: Back button from the toolbar +Location: Toolbar +Path to .json: modules/data/navigation.components.json +``` #### panel_ui ``` Selector name: panel-ui-button diff --git a/modules/browser_object_navigation.py b/modules/browser_object_navigation.py index 297fcf614..c39412ce3 100644 --- a/modules/browser_object_navigation.py +++ b/modules/browser_object_navigation.py @@ -1085,3 +1085,15 @@ def click_exit_button_searchmode(self) -> None: # Click the button self.get_element("exit-button-searchmode").click() + + @BasePage.context_chrome + def click_back_button(self) -> None: + """ + Click the 'Back' button. + Waits until the button is visible and clickable before performing the click. + """ + # Wait until the element is visible and clickable + self.expect(lambda _: self.get_element("back-button").is_displayed()) + + # Click the button + self.get_element("back-button").click() diff --git a/modules/data/navigation.components.json b/modules/data/navigation.components.json index 05a9e4007..647f4d3ec 100644 --- a/modules/data/navigation.components.json +++ b/modules/data/navigation.components.json @@ -669,6 +669,14 @@ "selectorData": "div.urlbarView-row[type='switchtab']", "strategy": "css", "groups": ["doNotCache"] + }, + + "back-button": { + "selectorData": "back-button", + "strategy": "id", + "groups": [ + "doNotCache" + ] } } diff --git a/modules/page_object_about_pages.py b/modules/page_object_about_pages.py index 95224294e..3fec34ec8 100644 --- a/modules/page_object_about_pages.py +++ b/modules/page_object_about_pages.py @@ -286,6 +286,23 @@ class AboutTelemetry(BasePage): URL_TEMPLATE = "about:telemetry" + def open_raw_json_data(self): + """ + Opens the Raw JSON telemetry view: + - Click Raw category + - Switch to the new tab + - Click the Raw Data tab + """ + + # Click "Raw" category + self.get_element("category-raw").click() + + # Switching to the new tab opened by Raw + self.switch_to_new_tab() + + # Click "Raw Data" tab + self.get_element("rawdata-tab").click() + class AboutNetworking(BasePage): """ diff --git a/tests/address_bar_and_search/test_google_search_counts_us.py b/tests/address_bar_and_search/test_google_search_counts_us.py index c1b4974d0..26472fc57 100644 --- a/tests/address_bar_and_search/test_google_search_counts_us.py +++ b/tests/address_bar_and_search/test_google_search_counts_us.py @@ -36,9 +36,7 @@ def test_google_search_counts_us(driver: Firefox): telemetry = AboutTelemetry(driver).open() sleep(WAIT_TELEMETRY_LOAD) - telemetry.get_element("category-raw").click() - telemetry.switch_to_new_tab() - telemetry.get_element("rawdata-tab").click() + telemetry.open_raw_json_data() json_data = utils.decode_url(driver) diff --git a/tests/address_bar_and_search/test_google_withads_url_bar_us.py b/tests/address_bar_and_search/test_google_withads_url_bar_us.py index 501548b30..484b8836a 100644 --- a/tests/address_bar_and_search/test_google_withads_url_bar_us.py +++ b/tests/address_bar_and_search/test_google_withads_url_bar_us.py @@ -46,9 +46,7 @@ def test_google_withads_url_bar_us(driver): about_telemetry = AboutTelemetry(driver).open() sleep(5) - about_telemetry.get_element("category-raw").click() - about_telemetry.switch_to_new_tab() - about_telemetry.get_element("rawdata-tab").click() + about_telemetry.open_raw_json_data() json_data = util.decode_url(driver) if util.assert_json_value(json_data, path, 1): diff --git a/tests/address_bar_and_search/test_sap_google_adclick.py b/tests/address_bar_and_search/test_sap_google_adclick.py index 395b643db..ca6bf28dd 100644 --- a/tests/address_bar_and_search/test_sap_google_adclick.py +++ b/tests/address_bar_and_search/test_sap_google_adclick.py @@ -34,9 +34,7 @@ def test_sap_google_adclick(driver: Firefox): telemetry = AboutTelemetry(driver).open() sleep(SLEEP_BEFORE_VERIFICATION) - telemetry.get_element("category-raw").click() - telemetry.switch_to_new_tab() - telemetry.get_element("rawdata-tab").click() + telemetry.open_raw_json_data() json_data = utils.decode_url(driver) assert utils.assert_json_value( diff --git a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py index e4d68f9b0..061ea1f17 100644 --- a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py +++ b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py @@ -1,6 +1,16 @@ +from time import sleep + import pytest from selenium.webdriver import Firefox +from modules.browser_object_navigation import Navigation +from modules.browser_object_tabbar import TabBar +from modules.page_object_about_pages import AboutTelemetry +from modules.util import Utilities + +TEXT = "Firefox" +SEARCHBAR_PATH = '$..["browser.search.content.searchbar"].["google:tagged:firefox-b-1-d"]' + @pytest.fixture() def test_case(): @@ -10,4 +20,46 @@ def test_case(): def test_searchengine_result_page_load_on_reload_or_back(driver: Firefox): """ C3028909 - Search Engine Result Page loads as a result of a reload or a back-button press - """ \ No newline at end of file + """ + + # Instantiate objects + nav = Navigation(driver) + telemetry = AboutTelemetry(driver) + utils = Utilities() + tab = TabBar(driver) + + # Go to "Customize Toolbar", drag Search bar to Toolbar and click Done + nav.add_search_bar_to_toolbar() + + # Using the search bar perform a search + nav.search_bar_search(TEXT) + sleep(1) + + # Press back from the browser menu + nav.click_back_button() + + # Go to about:telemetry -> Raw JSON -> Raw data + telemetry.open() + telemetry.open_raw_json_data() + + # Verify "browser.search.content.searchbar": { "google:tagged:firefox-b-d": 1}* + json_data = utils.decode_url(driver) + searchbar_ping = utils.assert_json_value(json_data, SEARCHBAR_PATH, 1) + assert searchbar_ping, f"Telemetry path not found: {SEARCHBAR_PATH}" + + # Open new tab and perform a new search in the search bar + tab.new_tab_by_button() + nav.search_bar_search(TEXT) + + # Press reload button + nav.refresh_page() + + # Go back to raw data page and reload it + driver.switch_to.window(driver.window_handles[1]) + nav.refresh_page() + telemetry.get_element("rawdata-tab").click() + + # Verify "browser.search.content.searchbar": { "google:tagged:firefox-b-d": 2}* + json_data = utils.decode_url(driver) + ping_value = utils.assert_json_value(json_data, SEARCHBAR_PATH, 2) + assert ping_value, f"Telemetry path not found or value mismatch: {SEARCHBAR_PATH}" From d4f6685a0199c0d346077555e708c5c7f7ba862b Mon Sep 17 00:00:00 2001 From: Hani Yacoub Date: Fri, 5 Dec 2025 17:31:19 +0200 Subject: [PATCH 03/11] Add test in manifests --- manifests/key.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/manifests/key.yaml b/manifests/key.yaml index 8ce65a2d1..33283fd4d 100644 --- a/manifests/key.yaml +++ b/manifests/key.yaml @@ -173,10 +173,14 @@ address_bar_and_search: result: pass splits: - functional1 - test_searchbar_results_shown_in_a_new_tab: + test_searchengine_result_page_load_on_reload_or_back: result: pass splits: - functional1 + test_searchbar_results_shown_in_a_new_tab: + result: pass + splits: + - functional1 test_searchmode_change_tab: result: pass splits: From 74b04ddc0258a7ae60f1a282e4d10401daf95a97 Mon Sep 17 00:00:00 2001 From: Hani Yacoub Date: Mon, 8 Dec 2025 13:44:11 +0200 Subject: [PATCH 04/11] Add wait --- .../test_searchengine_result_page_load_on_reload_or_back.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py index 061ea1f17..a43ea6eb5 100644 --- a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py +++ b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py @@ -2,6 +2,7 @@ import pytest from selenium.webdriver import Firefox +from selenium.webdriver.support.wait import WebDriverWait from modules.browser_object_navigation import Navigation from modules.browser_object_tabbar import TabBar @@ -42,6 +43,11 @@ def test_searchengine_result_page_load_on_reload_or_back(driver: Firefox): telemetry.open() telemetry.open_raw_json_data() + # Wait for raw JSON to be decodable + WebDriverWait(driver, 5).until( + lambda d: utils.decode_url(d) is not None + ) + # Verify "browser.search.content.searchbar": { "google:tagged:firefox-b-d": 1}* json_data = utils.decode_url(driver) searchbar_ping = utils.assert_json_value(json_data, SEARCHBAR_PATH, 1) From b1457e8de5faf15ca0e42b1ef060617f9ebe9309 Mon Sep 17 00:00:00 2001 From: Hani Yacoub Date: Mon, 8 Dec 2025 13:53:33 +0200 Subject: [PATCH 05/11] format --- ...est_searchengine_result_page_load_on_reload_or_back.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py index a43ea6eb5..5bb548351 100644 --- a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py +++ b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py @@ -10,7 +10,9 @@ from modules.util import Utilities TEXT = "Firefox" -SEARCHBAR_PATH = '$..["browser.search.content.searchbar"].["google:tagged:firefox-b-1-d"]' +SEARCHBAR_PATH = ( + '$..["browser.search.content.searchbar"].["google:tagged:firefox-b-1-d"]' +) @pytest.fixture() @@ -44,9 +46,7 @@ def test_searchengine_result_page_load_on_reload_or_back(driver: Firefox): telemetry.open_raw_json_data() # Wait for raw JSON to be decodable - WebDriverWait(driver, 5).until( - lambda d: utils.decode_url(d) is not None - ) + WebDriverWait(driver, 5).until(lambda d: utils.decode_url(d) is not None) # Verify "browser.search.content.searchbar": { "google:tagged:firefox-b-d": 1}* json_data = utils.decode_url(driver) From fad15335acf40c26db04b767fc8d5074d800d588 Mon Sep 17 00:00:00 2001 From: Hani Yacoub Date: Mon, 8 Dec 2025 15:00:08 +0200 Subject: [PATCH 06/11] Edit wait --- ...st_searchengine_result_page_load_on_reload_or_back.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py index 5bb548351..0c4163950 100644 --- a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py +++ b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py @@ -2,7 +2,9 @@ import pytest from selenium.webdriver import Firefox +from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC from modules.browser_object_navigation import Navigation from modules.browser_object_tabbar import TabBar @@ -45,9 +47,10 @@ def test_searchengine_result_page_load_on_reload_or_back(driver: Firefox): telemetry.open() telemetry.open_raw_json_data() - # Wait for raw JSON to be decodable - WebDriverWait(driver, 5).until(lambda d: utils.decode_url(d) is not None) - + # Wait for Raw JSON preload + WebDriverWait(driver, 15).until( + EC.presence_of_element_located((By.ID, "raw-payload-data")) + ) # Verify "browser.search.content.searchbar": { "google:tagged:firefox-b-d": 1}* json_data = utils.decode_url(driver) searchbar_ping = utils.assert_json_value(json_data, SEARCHBAR_PATH, 1) From 9e7ac3785f45c34c1eb4b7e3ee0bf6375bf0fce6 Mon Sep 17 00:00:00 2001 From: Hani Yacoub Date: Mon, 8 Dec 2025 15:51:32 +0200 Subject: [PATCH 07/11] remove wait --- ...test_searchengine_result_page_load_on_reload_or_back.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py index 0c4163950..0d1f196be 100644 --- a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py +++ b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py @@ -2,9 +2,6 @@ import pytest from selenium.webdriver import Firefox -from selenium.webdriver.common.by import By -from selenium.webdriver.support.wait import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC from modules.browser_object_navigation import Navigation from modules.browser_object_tabbar import TabBar @@ -47,10 +44,6 @@ def test_searchengine_result_page_load_on_reload_or_back(driver: Firefox): telemetry.open() telemetry.open_raw_json_data() - # Wait for Raw JSON preload - WebDriverWait(driver, 15).until( - EC.presence_of_element_located((By.ID, "raw-payload-data")) - ) # Verify "browser.search.content.searchbar": { "google:tagged:firefox-b-d": 1}* json_data = utils.decode_url(driver) searchbar_ping = utils.assert_json_value(json_data, SEARCHBAR_PATH, 1) From f314cab103e44a76341e82f76cd0a5b29d4c7c70 Mon Sep 17 00:00:00 2001 From: Hani Yacoub Date: Wed, 10 Dec 2025 15:59:24 +0200 Subject: [PATCH 08/11] Extend sleep time --- .../test_searchengine_result_page_load_on_reload_or_back.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py index 0d1f196be..0d80cbd01 100644 --- a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py +++ b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py @@ -35,7 +35,7 @@ def test_searchengine_result_page_load_on_reload_or_back(driver: Firefox): # Using the search bar perform a search nav.search_bar_search(TEXT) - sleep(1) + sleep(3) # Press back from the browser menu nav.click_back_button() From 8e58a935b7a28b4f47b58e948446c6047113586e Mon Sep 17 00:00:00 2001 From: Hani Yacoub Date: Thu, 11 Dec 2025 11:15:05 +0200 Subject: [PATCH 09/11] Edit --- .../test_searchengine_result_page_load_on_reload_or_back.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py index 0d80cbd01..1350abc2e 100644 --- a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py +++ b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py @@ -37,7 +37,7 @@ def test_searchengine_result_page_load_on_reload_or_back(driver: Firefox): nav.search_bar_search(TEXT) sleep(3) - # Press back from the browser menu + # Press back button from the browser menu nav.click_back_button() # Go to about:telemetry -> Raw JSON -> Raw data From 7d65b83d5c74447f2c09e8ea6f6888fba0e9d60b Mon Sep 17 00:00:00 2001 From: Hani Yacoub Date: Fri, 12 Dec 2025 11:44:47 +0200 Subject: [PATCH 10/11] Extend sleep time --- .../test_searchengine_result_page_load_on_reload_or_back.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py index 1350abc2e..dd9e9d0a1 100644 --- a/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py +++ b/tests/address_bar_and_search/test_searchengine_result_page_load_on_reload_or_back.py @@ -35,7 +35,7 @@ def test_searchengine_result_page_load_on_reload_or_back(driver: Firefox): # Using the search bar perform a search nav.search_bar_search(TEXT) - sleep(3) + sleep(5) # Press back button from the browser menu nav.click_back_button() From d0369d1c9907f0d0e2c0c053c5c8d86c1100ff0a Mon Sep 17 00:00:00 2001 From: Hani Yacoub Date: Fri, 12 Dec 2025 16:50:26 +0200 Subject: [PATCH 11/11] minor edits --- SELECTOR_INFO.md | 2 +- manifests/key.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/SELECTOR_INFO.md b/SELECTOR_INFO.md index cd1f07b16..e64ae96da 100644 --- a/SELECTOR_INFO.md +++ b/SELECTOR_INFO.md @@ -3770,7 +3770,7 @@ Path to .json: modules/data/pane_ui.components.json ``` ``` Selector Name: toolbarspring -Selector Data: ustomizableui-special-spring2 +Selector Data: customizableui-special-spring2 Description: toolbarspring Location: Toolbar Path to .json: modules/data/navigation.components.json diff --git a/manifests/key.yaml b/manifests/key.yaml index 951de0f0c..256242547 100644 --- a/manifests/key.yaml +++ b/manifests/key.yaml @@ -168,7 +168,7 @@ address_bar_and_search: test_searchbar_results_shown_in_a_new_tab: result: unstable splits: - - functional1 + - functional1 test_searchmode_change_tab: result: pass splits: