Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions SELECTOR_INFO.md
Original file line number Diff line number Diff line change
Expand Up @@ -663,16 +663,16 @@ Location: about:preferences#search
Path to .json: modules/data/about_prefs.components.json
```
```
Selector Name: firefox-suggest-nonsponsored
Selector Data: "firefoxSuggestNonsponsored"
Selector Name: firefox-suggestions
Selector Data: showSearchSuggestionsFirstCheckbox
Description: The Suggestions from Firefox check-box
Location: about:preferences#search > Address Bar - Firefox Suggest
Path to .json: modules/data/about_prefs.components.json
```
```
Selector Name: firefox-suggest-sponsored
Selector Data: "firefoxSuggestSponsored"
Description: The Suggestions from sponsors check-box
Selector Name: firefox-trending-suggestions
Selector Data: showTrendingSuggestions
Description: Trending search suggestions check-box
Location: about:preferences#search > Address Bar - Firefox Suggest
Path to .json: modules/data/about_prefs.components.json
```
Expand Down Expand Up @@ -2617,7 +2617,7 @@ Path to .json: modules/data/login_autofill.components.json
```
Selector Name: facebook-credentials
Selector Data: ".autocomplete-richlistbox .autocomplete-richlistitem[ac-value='username1']"
Description: Autocomplete dropdown is toggled for focused login fields on facebook page load
Description: Autocomplete dropdown is toggled for focused login fields on facebook page load
Location: Facebook page load
Path to .json: modules/data/login_autofill.components.json
```
Expand Down
8 changes: 4 additions & 4 deletions modules/data/about_prefs.components.json
Original file line number Diff line number Diff line change
Expand Up @@ -201,13 +201,13 @@
"strategy": "id",
"groups": []
},
"firefox-suggest-nonsponsored": {
"selectorData": "firefoxSuggestNonsponsored",
"firefox-suggestions": {
"selectorData": "showSearchSuggestionsFirstCheckbox",
"strategy": "id",
"groups": []
},
"firefox-suggest-sponsored": {
"selectorData": "firefoxSuggestSponsored",
"firefox-trending-suggestions": {
"selectorData": "showTrendingSuggestions",
"strategy": "id",
"groups": []
},
Expand Down
4 changes: 3 additions & 1 deletion modules/page_object_about_pages.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,9 @@ def remove_password_csv(self, downloads_dir):
if delete_files_regex.match(file):
os.remove(passwords_csv)

def verify_csv_export(self, downloads_folder: str, filename: str, timeout: int = 20):
def verify_csv_export(
self, downloads_folder: str, filename: str, timeout: int = 20
):
"""
Wait until the exported CSV file is present, non-empty, and readable.
"""
Expand Down
21 changes: 20 additions & 1 deletion modules/page_object_prefs.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from modules.classes.credit_card import CreditCardBase
from modules.components.dropdown import Dropdown
from modules.page_base import BasePage
from modules.util import Utilities
from modules.util import BrowserActions, Utilities


class AboutPrefs(BasePage):
Expand Down Expand Up @@ -786,6 +786,25 @@ def handle_unknown_content_dialog(self) -> BasePage:
dialog.send_keys(Keys.ESCAPE)
return self

def open_manage_cookies_data_dialog(self) -> BasePage:
"""
Open the 'Manage Cookies and Site Data' dialog safely.

Waits for the 'Manage browsing data' button to be clickable, clicks it to open
the dialog, and switches the driver context to the dialog's iframe. After
calling this method, subsequent element interactions will be within the
dialog's iframe context.

Note: This method assumes the about:preferences page is already open.
Call self.open() first if needed.
"""
self.element_clickable("prefs-button", labels=["Manage browsing data"])
manage_data_popup = self.press_button_get_popup_dialog_iframe(
"Manage browsing data"
)
BrowserActions(self.driver).switch_to_iframe_context(manage_data_popup)
return self


class AboutAddons(BasePage):
"""
Expand Down
8 changes: 4 additions & 4 deletions tests/address_bar_and_search/test_search_suggestions.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@ def test_search_suggests_enabled(driver: Firefox):
if not suggestions_checkbox.is_selected():
suggestions_checkbox.click()

nonsponsored_checkbox = prefs.get_element("firefox-suggest-nonsponsored")
nonsponsored_checkbox = prefs.get_element("firefox-suggestions")
assert nonsponsored_checkbox.is_selected(), (
"'firefox-suggest-nonsponsored' checkbox not checked"
"'firefox-suggestions' checkbox not checked"
)

sponsored_checkbox = prefs.get_element("firefox-suggest-sponsored")
sponsored_checkbox = prefs.get_element("firefox-trending-suggestions")
assert sponsored_checkbox.is_selected(), (
"'firefox-suggest-sponsored' checkbox not checked"
"'firefox-trending-suggestions' checkbox not checked"
)

# Check for sponsored suggestion
Expand Down
1 change: 1 addition & 0 deletions tests/password_manager/test_password_csv_correctness.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ def test_case():
return "2241522"


@pytest.mark.unstable(reason="Bug 1996004")
@pytest.mark.headed
@pytest.mark.noxvfb
def test_password_csv_correctness(
Expand Down
1 change: 1 addition & 0 deletions tests/password_manager/test_password_csv_export.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ def test_case():
return "2241521"


@pytest.mark.unstable(reason="Bug 1996005")
@pytest.mark.headed
@pytest.mark.noxvfb
def test_password_csv_export(
Expand Down
82 changes: 31 additions & 51 deletions tests/preferences/test_manage_cookie_data.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import logging
from time import sleep

import pytest
from pynput.keyboard import Controller, Key
from selenium.webdriver import Firefox

from modules.page_object import AboutPrefs
from modules.page_object_prefs import AboutPrefs
from modules.util import BrowserActions


Expand All @@ -14,80 +14,60 @@ def test_case():


COOKIE_SITE = "google.com"
TEST_SITES = [
"https://www.google.com",
"https://www.jetbrains.com",
"https://www.wikipedia.com",
]


@pytest.mark.headed
@pytest.mark.noxvfb
def test_manage_cookie_data(driver: Firefox):
"""
C143633 - Cookies and Site Data can be managed
via the "Managed Cookies and Site Data" pane
C143633 - Cookies and Site Data can be managed via the "Managed Cookies and Site Data" panel.
"""
# Instantiate objects
# Initialize objects
about_prefs = AboutPrefs(driver, category="privacy")
ba = BrowserActions(driver)
keyboard = Controller()

def open_manage_cookies_data_dialog():
about_prefs.open()
manage_data_popup = about_prefs.press_button_get_popup_dialog_iframe(
"Manage browsing data"
)
ba.switch_to_iframe_context(manage_data_popup)
# Visit some sites to add cookies
for site in TEST_SITES:
driver.get(site)

# Visit some sites to get a few cookies added to saved data
driver.get("https://www.google.com")
sleep(1)
driver.get("https://www.jetbrains.com")
sleep(1)
driver.get("https://www.wikipedia.com")
sleep(1)
# Open the Manage Cookies dialog
about_prefs.open()
about_prefs.open_manage_cookies_data_dialog()

# Navigate to the manage data dialog of about:preferences#privacy
open_manage_cookies_data_dialog()

# Click on one of the items from the list.
# Select and remove one cookie
cookie_item = about_prefs.get_manage_data_site_element(COOKIE_SITE)
cookie_item.click()
assert cookie_item.get_attribute("selected") == "true"

# The clicked on site in the list is highlighted
selected = cookie_item.get_attribute("selected")
assert selected == "true"

# Click the "Remove Selected" button.
about_prefs.get_element("remove-selected-cookie-button").click()

# The selected item is removed from the list.
about_prefs.element_does_not_exist("manage-cookies-site", labels=[COOKIE_SITE])

# Click on the "Remove All" button and wait for changes to take.
# Remove all cookies
about_prefs.get_element("remove-all-button").click()
sleep(1)

# All the sites are removed from the list.
# NOTE: There seems to be an empty placeholder element, thus 1 item is always there.
cookie_list = about_prefs.get_elements("cookies-manage-data-sitelist")
assert len(cookie_list) == 1

# Click on "Save Changes" button and wait for changes to take.
# Save changes and handle confirmation alert
about_prefs.get_element("manage-data-save-changes-button").click()
sleep(1)

# Using pynput, navigate to the "Remove" button of the acceptance dialog/alert,
# then send the Enter key and wait for changes to take
keyboard.press(Key.tab)
keyboard.release(Key.tab)
sleep(0.5)
keyboard.press(Key.tab)
keyboard.release(Key.tab)
sleep(0.5)
keyboard.press(Key.enter)
keyboard.release(Key.enter)
sleep(1)
try:
alert = about_prefs.get_alert()
logging.info(f"Alert text: {alert.text}")
alert.accept()
logging.info("Alert accepted successfully.")
except Exception as e:
logging.warning(f"No alert appeared or failed to handle: {e}")

# Navigate back to the manage data dialog of about:preferences#privacy
open_manage_cookies_data_dialog()
ba.switch_to_content_context()
sleep(1)

# All the cookies and site data are deleted.
# Reopen and confirm cookies cleared
about_prefs.open_manage_cookies_data_dialog()
cookie_list_post_remove = about_prefs.get_elements("cookies-manage-data-sitelist")
assert len(cookie_list_post_remove) == 1 # NOTE: always an empty item here
assert len(cookie_list_post_remove) == 1
Loading