diff --git a/developer.txt b/developer.txt index 2cdf062e..a22f2d44 100644 --- a/developer.txt +++ b/developer.txt @@ -1 +1 @@ -w4b038cxgtr1hoht20ecbr1libbe1ij9 \ No newline at end of file +3ipx3mgjtubeg09stois2qerdxt6gq5a \ No newline at end of file diff --git a/devhub-parallel-test-results.html b/devhub-parallel-test-results.html index 4a55a3d3..3479af2d 100644 --- a/devhub-parallel-test-results.html +++ b/devhub-parallel-test-results.html @@ -429,10 +429,10 @@ }

devhub-parallel-test-results.html

-

Report generated on 17-Nov-2025 at 17:58:00 by pytest-html v3.1.1

+

Report generated on 28-Jan-2026 at 17:14:37 by pytest-html v3.1.1

Summary

-

68 tests ran in 1184.44 seconds.

- 64 passed, 2 skipped, 4 failed, 0 errors, 0 expected failures, 0 unexpected passes, 0 rerun +

10 tests ran in 284.39 seconds.

+ 8 passed, 0 skipped, 2 failed, 0 errors, 0 expected failures, 0 unexpected passes, 0 rerun

Results

@@ -443,485 +443,53 @@

Results

- - - - - - - - - - - - - - - - - - + + +
+
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="64c0070d-cf7d-4620-8289-79ea285671fe")>, count = 0
link = 'en-US/?redirect_source=mozilla-org&utm_campaign=SET_DEFAULT_BROWSER'

@pytest.mark.parametrize(
"count, link",
enumerate(
[
"en-US/?redirect_source=mozilla-org&utm_campaign=SET_DEFAULT_BROWSER",
"en-US/browsers/mobile/",
"en-US/browsers/enterprise/",
]
),
ids=[
"DevHub Footer - Browsers section - Desktop",
"DevHub Footer - Browsers section - Mobile",
"DevHub Footer - Browsers section - Enterprise",
],
)
@pytest.mark.nondestructive
@pytest.mark.fail
def test_devhub_browsers_footer_links(base_url, selenium, count, link):
"""Verifies that the links under the "Browsers" section
in the DevHub footer lead to the correct pages
for Firefox Desktop, Mobile, and Enterprise."""
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
page.footer.browsers_links[count].click()
> page.wait_for_current_url(link)

tests/devhub/test_devhub_home.py:580:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/base.py:36: in wait_for_current_url
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="64c0070d-cf7d-4620-8289-79ea285671fe")>, method = <function url_contains.<locals>._predicate at 0x105ac44a0>
message = 'The url was https://www.firefox.com/en-US/?redirect_source=mozilla-org&utm_source=addons.mozilla.org&utm_medium=referral&utm_content=footer-link'

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message: The url was https://www.firefox.com/en-US/?redirect_source=mozilla-org&utm_source=addons.mozilla.org&utm_medium=referral&utm_content=footer-link

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
+
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="914a1da3-6a89-47a1-9756-f10ed4b775ab")>, count = 0
link = 'en-US/?utm_campaign=SET_DEFAULT_BROWSER'

@pytest.mark.parametrize(
"count, link",
enumerate(
[
"en-US/?utm_campaign=SET_DEFAULT_BROWSER",
"products/vpn/",
"relay.firefox.com/",
"monitor.mozilla",
"getpocket.com",
]
),
ids=[
"DevHub Footer - Products section - Browsers",
"DevHub Footer - Products section - VPN",
"DevHub Footer - Products section - Relay",
"DevHub Footer - Products section - Monitor",
"DevHub Footer - Products section - Pocket",
],
)
@pytest.mark.nondestructive
@pytest.mark.fail
def test_devhub_products_footer_links(base_url, selenium, count, link):
"""Ensures that the links under the "Products" section
in the DevHub footer lead to the correct pages for
Firefox, VPN, Relay, Monitor, and Pocket."""
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
page.products_links[count].click()
> page.wait_for_current_url(link)

tests/devhub/test_devhub_home.py:610:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/base.py:36: in wait_for_current_url
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="914a1da3-6a89-47a1-9756-f10ed4b775ab")>, method = <function url_contains.<locals>._predicate at 0x105aba660>
message = 'The url was https://www.firefox.com/en-US/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=footer-link'

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message: The url was https://www.firefox.com/en-US/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=footer-link

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
- + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
Links
Failedtests/devhub/test_addon_validate.py::test_validate_addon_listed[Desktop]88.96
-
-
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="1109454e-8c47-49ab-8954-410bc2973267")>, base_url = 'https://addons.allizom.org'
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{446900e4-71c2-419f-a6a7-df9c091e268b}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}

@pytest.mark.sanity
@pytest.mark.login("developer")
def test_validate_addon_listed(selenium, base_url, variables):
"""Verifies the process of validating a listed addon using the "On This Site"
checkbox in the DevHub Addon Validate page.
The test ensures that the addon is uploaded and validated successfully,
displaying appropriate success messages."""
"""Go to Devhub Addon Validate page"""
DevHubHome(selenium, base_url).open().wait_for_page_to_load()
devhub_addon_validate = (
DevhubAddonValidate(selenium, base_url).open().wait_for_page_to_load()
)
assert (
variables["on_this_site_label_message"]
in devhub_addon_validate.addon_on_your_site.text
)
assert (
variables["on_your_own_label_message"]
in devhub_addon_validate.addon_on_your_own.text
)
"""Click on On This Site Checkbox"""
devhub_addon_validate.click_on_this_site_checkbox()
assert devhub_addon_validate.on_this_site_checkbox.is_selected()
"""Upload addon and check if validation is approved"""
devhub_addon_validate.upload_file("listed-addon.zip")
devhub_addon_validate.is_validation_approved()
> assert (
variables["addon_validation_message"]
in devhub_addon_validate.upload_details_results_succes.text
)
E assert 'Your add-on was validated with no errors and 1 message.' in 'Your add-on was validated with no errors and 2 warnings.\nAdd-on submission checklist\nPlease verify the following po...a test username and password in the Notes to Reviewer (this can be done in the next step).\nSee full validation report'
E + where 'Your add-on was validated with no errors and 2 warnings.\nAdd-on submission checklist\nPlease verify the following po...a test username and password in the Notes to Reviewer (this can be done in the next step).\nSee full validation report' = <selenium.webdriver.remote.webelement.WebElement (session="1109454e-8c47-49ab-8954-410bc2973267", element="978f7459-118f-4eff-b14f-4ed8528cc677")>.text
E + where <selenium.webdriver.remote.webelement.WebElement (session="1109454e-8c47-49ab-8954-410bc2973267", element="978f7459-118f-4eff-b14f-4ed8528cc677")> = <pages.desktop.developers.devhub_addon_validate.DevhubAddonValidate object at 0x105842710>.upload_details_results_succes

tests/devhub/test_addon_validate.py:34: AssertionError
-----------------------------Captured stdout setup------------------------------
-The "click continue button" event occurred. -
Failedtests/devhub/test_addon_validate.py::test_validate_addon_unlisted[Desktop]82.67
-
-
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="f2423499-50a3-4987-bd57-4112bedade64")>, base_url = 'https://addons.allizom.org'
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{446900e4-71c2-419f-a6a7-df9c091e268b}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}

@pytest.mark.sanity
@pytest.mark.login("developer")
def test_validate_addon_unlisted(selenium, base_url, variables):
"""Verifies the process of validating an unlisted addon using
the "On Your Own" checkbox in the DevHub Addon Validate page.
The test checks that the addon is uploaded and validated successfully,
displaying appropriate success messages."""
"""Go to Devhub Addon Validate page"""
DevHubHome(selenium, base_url).open().wait_for_page_to_load()
devhub_addon_validate = (
DevhubAddonValidate(selenium, base_url).open().wait_for_page_to_load()
)
assert (
variables["on_this_site_label_message"]
in devhub_addon_validate.addon_on_your_site.text
)
assert (
variables["on_your_own_label_message"]
in devhub_addon_validate.addon_on_your_own.text
)
"""Click on On Your Own Checkbox"""
devhub_addon_validate.click_on_your_own_text_checkbox()
assert devhub_addon_validate.on_your_own_text_checkbox.is_selected()
devhub_addon_validate.upload_file("unlisted-addon.zip")
devhub_addon_validate.is_validation_approved()
> assert (
variables["addon_validation_message"]
in devhub_addon_validate.upload_details_results_succes.text
)
E assert 'Your add-on was validated with no errors and 1 message.' in 'Your add-on was validated with no errors and 2 warnings.\nAdd-on submission checklist\nPlease verify the following po...a test username and password in the Notes to Reviewer (this can be done in the next step).\nSee full validation report'
E + where 'Your add-on was validated with no errors and 2 warnings.\nAdd-on submission checklist\nPlease verify the following po...a test username and password in the Notes to Reviewer (this can be done in the next step).\nSee full validation report' = <selenium.webdriver.remote.webelement.WebElement (session="f2423499-50a3-4987-bd57-4112bedade64", element="4aac8fad-2bd6-4682-9a5b-037a0197ef56")>.text
E + where <selenium.webdriver.remote.webelement.WebElement (session="f2423499-50a3-4987-bd57-4112bedade64", element="4aac8fad-2bd6-4682-9a5b-037a0197ef56")> = <pages.desktop.developers.devhub_addon_validate.DevhubAddonValidate object at 0x105858cd0>.upload_details_results_succes

tests/devhub/test_addon_validate.py:122: AssertionError
-----------------------------Captured stdout setup------------------------------
-The "click continue button" event occurred. -
Failed tests/devhub/test_devhub_home.py::test_devhub_browsers_footer_links[Desktop-DevHub Footer - Browsers section - Desktop]37.39
43.94
-
-
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="e229de85-3b9c-4f4a-8eca-2f12644d8fbb")>, count = 0
link = 'en-US/?redirect_source=mozilla-org&utm_campaign=SET_DEFAULT_BROWSER'

@pytest.mark.parametrize(
"count, link",
enumerate(
[
"en-US/?redirect_source=mozilla-org&utm_campaign=SET_DEFAULT_BROWSER",
"en-US/browsers/mobile/",
"en-US/browsers/enterprise/",
]
),
ids=[
"DevHub Footer - Browsers section - Desktop",
"DevHub Footer - Browsers section - Mobile",
"DevHub Footer - Browsers section - Enterprise",
],
)
@pytest.mark.nondestructive
def test_devhub_browsers_footer_links(base_url, selenium, count, link):
"""Verifies that the links under the "Browsers" section
in the DevHub footer lead to the correct pages
for Firefox Desktop, Mobile, and Enterprise."""
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
page.footer.browsers_links[count].click()
> page.wait_for_current_url(link)

tests/devhub/test_devhub_home.py:577:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/base.py:36: in wait_for_current_url
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="e229de85-3b9c-4f4a-8eca-2f12644d8fbb")>, method = <function url_contains.<locals>._predicate at 0x105dc6700>
message = 'The url was https://www.firefox.com/en-US/?redirect_source=mozilla-org&utm_source=addons.mozilla.org&utm_medium=referral&utm_content=footer-link'

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message: The url was https://www.firefox.com/en-US/?redirect_source=mozilla-org&utm_source=addons.mozilla.org&utm_medium=referral&utm_content=footer-link

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - Browsers]36.89
-
-
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="4877a420-d23b-441e-be5e-e8c57aae78b9")>, count = 0
link = 'en-US/?utm_campaign=SET_DEFAULT_BROWSER'

@pytest.mark.parametrize(
"count, link",
enumerate(
[
"en-US/?utm_campaign=SET_DEFAULT_BROWSER",
"products/vpn/",
"relay.firefox.com/",
"monitor.mozilla",
"getpocket.com",
]
),
ids=[
"DevHub Footer - Products section - Browsers",
"DevHub Footer - Products section - VPN",
"DevHub Footer - Products section - Relay",
"DevHub Footer - Products section - Monitor",
"DevHub Footer - Products section - Pocket",
],
)
@pytest.mark.nondestructive
def test_devhub_products_footer_links(base_url, selenium, count, link):
"""Ensures that the links under the "Products" section
in the DevHub footer lead to the correct pages for
Firefox, VPN, Relay, Monitor, and Pocket."""
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
page.products_links[count].click()
> page.wait_for_current_url(link)

tests/devhub/test_devhub_home.py:606:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/base.py:36: in wait_for_current_url
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="4877a420-d23b-441e-be5e-e8c57aae78b9")>, method = <function url_contains.<locals>._predicate at 0x105e702c0>
message = 'The url was https://www.firefox.com/en-US/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=footer-link'

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message: The url was https://www.firefox.com/en-US/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=footer-link

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Skippedtests/devhub/test_devhub_home.py::test_devhub_page_get_involved[Desktop]0.00
-
('/Users/alexandru.schek/addons-release-tests/tests/devhub/test_devhub_home.py', 96, 'Skipped: unconditional skip')
Skippedtests/devhub/test_devhub_home.py::test_verify_newsletter_signup_confirmation[Desktop]0.00
-
('/Users/alexandru.schek/addons-release-tests/tests/devhub/test_devhub_home.py', 479, 'Skipped: Skipped until this issue is fixed: https://github.com/mozilla/addons-server/issues/21335')
Passedtests/devhub/test_addon_edit.py::test_set_addon_invisible_tc_id_c4371[Desktop]153.43
-
-----------------------------Captured stdout setup------------------------------
-The "click continue button" event occurred. -
Passedtests/devhub/test_addon_edit.py::test_disable_enable_version_tc_id_c159074[Desktop]13.02
-
No log output captured.
Passedtests/devhub/test_addon_validate.py::test_validate_listed_addon_option_no_manifest_found[Desktop]9.78
-
No log output captured.
Passedtests/devhub/test_addon_validate.py::test_validate_listed_addon_option_unsupported_format[Desktop]6.74
-
No log output captured.
Passedtests/devhub/test_addon_validate.py::test_validate_unlisted_addon_option_no_manifest_found[Desktop]8.66
-
No log output captured.
Passedtests/devhub/test_addon_validate.py::test_validate_unlisted_addon_option_unsupported_format[Desktop]6.44
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_logo[Desktop]6.24
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_click_extension_workshop[Desktop]6.93
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_click_documentation[Desktop]6.75
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_click_support[Desktop]6.63
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_click_blog[Desktop]6.50
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_login[Desktop]77.51
43.06
-
-----------------------------Captured stdout setup------------------------------
-The "click continue button" event occurred. -
Passedtests/devhub/test_devhub_home.py::test_devhub_page_overview[Desktop]6.86
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_get_involved_box[Desktop]5.74
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_page_content[Desktop]5.52
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_content_login_link[Desktop]6.85
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_click_my_addons_header_link[Desktop]79.68
-
-----------------------------Captured stdout setup------------------------------
-The "click continue button" event occurred. -
Passedtests/devhub/test_devhub_home.py::test_devhub_click_header_profile_icon[Desktop]6.70
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_logged_in_page_hero_banner_tc_id_C15072[Desktop]45.06
-
------------------------------Captured stdout call------------------------------
-The "click continue button" event occurred. -
Passedtests/devhub/test_devhub_home.py::test_devhub_my_addons_section_tc_id_C15072[Desktop]43.55
-
------------------------------Captured stdout call------------------------------
-The "click continue button" event occurred. -
Passedtests/devhub/test_devhub_home.py::test_devhub_my_addons_list_items[Desktop]6.63
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_my_addons_list_approval_status[Desktop]8.96
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_click_see_all_addons_link[Desktop]8.42
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_click_submit_new_addon_button_tc_id_c14882[Desktop]6.79
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_click_submit_new_theme_button[Desktop]7.17
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_click_first_theme_button[Desktop]47.32
-
------------------------------Captured stdout call------------------------------
-The "click continue button" event occurred. -
Passed tests/devhub/test_devhub_home.py::test_devhub_resources_footer_documentation_links_tc_id_C15072[Desktop]47.7159.56
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred.
Passedtests/devhub/test_devhub_home.py::test_devhub_resources_footer_tools_links_tc_id_C15072[Desktop]9.58
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_resources_footer_promote_links_tc_id_C15072[Desktop]8.62
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_resources_join_addon_review[Desktop]6.82
-
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_resources_participate[Desktop]44.2352.17
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred.
Passedtests/devhub/test_devhub_home.py::test_page_connect_footer_more_links[Desktop-AMO Matrix channel]8.35
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_page_connect_footer_more_links[Desktop-Mozilla Discourse]8.03
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_connect_newsletter_section[Desktop]6.44
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_mozilla_footer_link[Desktop]7.40
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - About]5.82
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Blog]8.19
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Extension Workshop]6.95
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Developer Hub]7.64
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Developer Policies]6.32
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Community Blog]7.13
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Forum]9.23
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Report a bug]6.68
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Review Guide]6.36
-
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_browsers_footer_links[Desktop-DevHub Footer - Browsers section - Mobile]6.8913.18
@@ -930,7 +498,7 @@

Results

Passed tests/devhub/test_devhub_home.py::test_devhub_browsers_footer_links[Desktop-DevHub Footer - Browsers section - Enterprise]7.0213.26
@@ -939,7 +507,7 @@

Results

Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - VPN]6.3312.85
@@ -948,7 +516,7 @@

Results

Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - Relay]7.0118.82
@@ -957,7 +525,7 @@

Results

Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - Monitor]8.3313.84
@@ -966,133 +534,7 @@

Results

Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - Pocket]6.76
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_social_footer_links[Desktop-DevHub Footer - Social section - Twitter]7.14
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_social_footer_links[Desktop-DevHub Footer - Social section - Instagram]6.84
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_social_footer_links[Desktop-DevHub Footer - Social section - YouTube]6.53
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_legal_footer_links[Desktop-DevHub Footer - Legal section - Privacy]5.72
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_legal_footer_links[Desktop-DevHub Footer - Legal section - Cookies]5.85
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_legal_footer_links[Desktop-DevHub Footer - Legal section - Legal]6.48
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub French Translation]6.15
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub German Translation]6.06
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub Chinese Translation]6.42
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub Russian Translation]6.24
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub Hebrew Translation]6.19
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_footer_copyright_message[Desktop-Legal]6.54
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_footer_copyright_message[Desktop-Creative Commons License]6.49
-
No log output captured.
Passedtests/devhub/test_devhub_home.py::test_devhub_logout_tc_id_c15075[Desktop]7.0313.05
diff --git a/pages/desktop/developers/devhub_home.py b/pages/desktop/developers/devhub_home.py index ce80dd7b..eed8e77b 100644 --- a/pages/desktop/developers/devhub_home.py +++ b/pages/desktop/developers/devhub_home.py @@ -47,11 +47,11 @@ class DevHubHome(Base): ) _get_involved_title_locator = ( By.CSS_SELECTOR, - ".DevHub-content-container--get-involved h3", + ".DevHub-Footer-sections-header", ) _get_involved_summary_locator = ( By.CSS_SELECTOR, - ".DevHub-content-container--get-involved p", + ".DevHub-Footer-section p", ) _add_ons_contribute_title_locator = ( By.CSS_SELECTOR, diff --git a/rating_user.txt b/rating_user.txt index 54851c18..a9e6546f 100644 --- a/rating_user.txt +++ b/rating_user.txt @@ -1 +1 @@ -hnv17ws1j4zy90c4ksdcu6nnjajqwmsh \ No newline at end of file +jirq7krnj3ow8yes0von3bn6fyp26six \ No newline at end of file diff --git a/ratings-test-results.html b/ratings-test-results.html index f68b3d09..75f09a13 100644 --- a/ratings-test-results.html +++ b/ratings-test-results.html @@ -429,10 +429,10 @@ }

ratings-test-results.html

-

Report generated on 04-Nov-2025 at 15:31:08 by pytest-html v3.1.1

+

Report generated on 02-Feb-2026 at 15:25:21 by pytest-html v3.1.1

Summary

-

28 tests ran in 943.76 seconds.

- 28 passed, 1 skipped, 0 failed, 0 errors, 0 expected failures, 0 unexpected passes, 0 rerun +

3 tests ran in 133.78 seconds.

+ 3 passed, 0 skipped, 0 failed, 0 errors, 0 expected failures, 0 unexpected passes, 0 rerun

Results

@@ -443,234 +443,11 @@

Results

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - +
Links
Skippedtests/frontend/test_ratings.py::test_restricted_user_rating_submission[Desktop]0.00
-
('/Users/alexandru.schek/addons-release-tests/tests/frontend/test_ratings.py', 755, 'Skipped: unconditional skip')
Passedtests/frontend/test_ratings.py::test_throttled_request_create_rating_spam[Desktop]60.34
-
------------------------------Captured stdout call------------------------------
-The "click continue button" event occurred. -
Passedtests/frontend/test_ratings.py::test_throttled_request_update_rating_spam[Desktop]80.67
-
------------------------------Captured stdout call------------------------------
-The "click continue button" event occurred. -
Passedtests/frontend/test_ratings.py::test_rating_with_text_tc_id_c94034[Desktop]87.92
-
-----------------------------Captured stdout setup------------------------------
-The "click continue button" event occurred. -
Passedtests/frontend/test_ratings.py::test_user_review_permalink_tc_id_c1494903[Desktop]80.77
-
------------------------------Captured stdout call------------------------------
-The "click continue button" event occurred. -
Passedtests/frontend/test_ratings.py::test_edit_review_tc_id_c94035[Desktop]82.70
-
-----------------------------Captured stdout setup------------------------------
-The "click continue button" event occurred. -
Passedtests/frontend/test_ratings.py::test_cancel_edit_review[Desktop]10.12
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_cancel_delete_review[Desktop]9.39
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_delete_review_tc_id_c4421[Desktop]10.51
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_rating_without_text_tc_id_c95947[Desktop]86.51
-
------------------------------Captured stdout call------------------------------
-The "click continue button" event occurred. -
Passedtests/frontend/test_ratings.py::test_edit_star_rating[Desktop]84.56
-
-----------------------------Captured stdout setup------------------------------
-The "click continue button" event occurred. -
Passedtests/frontend/test_ratings.py::test_link_to_all_reviews[Desktop]11.29
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_delete_rating[Desktop]10.18
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_flag_review_action_tc_id_c1494904[Desktop]11.04
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_all_reviews_page_items[Desktop]10.05
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_filter_reviews_by_score[Desktop]13.57
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_filter_reviews_from_rating_bars[Desktop]9.33
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_flag_missing_for_empty_review_tc_id_c1494904[Desktop]9.22
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_flag_review_menu_options_tc_id_c1494904[Desktop]81.97
-
-----------------------------Captured stdout setup------------------------------
-The "click continue button" event occurred. -
Passedtests/frontend/test_ratings.py::test_click_on_review_posting_time_link[Desktop]7.53
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_write_review_in_all_reviews_page[Desktop]15.79
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_edit_review_in_all_reviews_page[Desktop]11.19
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_delete_review_in_all_reviews_page[Desktop]11.65
-
No log output captured.
Passed tests/frontend/test_ratings.py::test_developer_reply_to_review[Desktop]82.6298.78
@@ -681,7 +458,7 @@

Results

Passed tests/frontend/test_ratings.py::test_edit_developer_reply_to_review[Desktop]12.1418.17
@@ -690,34 +467,7 @@

Results

Passed tests/frontend/test_ratings.py::test_delete_developer_reply_to_review[Desktop]10.70
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_developers_cannot_rate_their_own_addons[Desktop]13.07
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_banned_words_in_user_reviews[Desktop-Single word ban]14.58
-
No log output captured.
Passedtests/frontend/test_ratings.py::test_banned_words_in_user_reviews[Desktop-Multiple words ban]14.1016.75
diff --git a/reviewer_user.txt b/reviewer_user.txt index ad744f77..8ada74f1 100644 --- a/reviewer_user.txt +++ b/reviewer_user.txt @@ -1 +1 @@ -b7cd98fi44d4f0zumneoxtf30p9n0xit \ No newline at end of file +9p9ct3f5ltme8gosjef6a8vagztly6lx \ No newline at end of file diff --git a/sample-addons/make-addon.zip b/sample-addons/make-addon.zip index eac17d3a..96b9f108 100644 Binary files a/sample-addons/make-addon.zip and b/sample-addons/make-addon.zip differ diff --git a/stage.json b/stage.json index b38f54dc..66157b2a 100644 --- a/stage.json +++ b/stage.json @@ -114,7 +114,7 @@ "devhub_content_header": "Ready to submit or manage your extension?", "devhub_content_summary": "Sign in to the Developer Hub to submit or manage extensions and themes", "devhub_get_involved_header": "Get involved", - "devhub_get_involved_summary": "Connect with thousands of developers and discover more ways you can contribute to the extension ecosystem.", + "devhub_get_involved_summary": "Help make add-ons better by contributing your coding skills.", "devhub_newsletter_header": "Extensions Developers Newsletter", "devhub_newsletter_info_text": "Stay up-to-date on news and events for Firefox extension developers.", "devhub_signup_confirmation_title": "Thanks!", diff --git a/submissions-test-results.html b/submissions-test-results.html index 1be1e96b..2b20079e 100644 --- a/submissions-test-results.html +++ b/submissions-test-results.html @@ -429,9 +429,9 @@ }

submissions-test-results.html

-

Report generated on 24-Nov-2025 at 19:11:06 by pytest-html v3.1.1

+

Report generated on 02-Feb-2026 at 16:08:02 by pytest-html v3.1.1

Summary

-

22 tests ran in 1115.35 seconds.

+

22 tests ran in 1241.62 seconds.

21 passed, 1 skipped, 1 failed, 0 errors, 0 expected failures, 0 unexpected passes, 0 rerun

Results

@@ -447,12 +447,12 @@

Results

- - + + @@ -467,7 +467,7 @@

Results

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + +
Failed tests/devhub_submissions/test_addon_submissions.py::test_addon_last_modified_date[Desktop]6.61
12.45
-
-
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="46e9dafc-99ab-4dc3-a387-ba17ee15c6cb")>, base_url = 'https://addons.allizom.org'

@pytest.mark.serial
@pytest.mark.create_session("submissions_user")
def test_addon_last_modified_date(selenium, base_url):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
# check the last modified date in the latest submitted addon on Devhub homepage (should be current date)
print(page.my_addons_list[0].my_addon_modified_date_text)
> assert (
reusables.current_date() == page.my_addons_list[0].my_addon_modified_date_text
)
E AssertionError: assert 'Nov #d, 2025' == 'Nov 24, 2025'
E - Nov 24, 2025
E ? ^^
E + Nov #d, 2025
E ? ^^

tests/devhub_submissions/test_addon_submissions.py:370: AssertionError
------------------------------Captured stdout call------------------------------
Nov 24, 2025 +
+
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="97ebc9b3-b2ea-4b96-b4ac-72c4edfa6ed0")>, base_url = 'https://addons.allizom.org'

@pytest.mark.serial
@pytest.mark.create_session("submissions_user")
def test_addon_last_modified_date(selenium, base_url):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
# check the last modified date in the latest submitted addon on Devhub homepage (should be current date)
print(page.my_addons_list[0].my_addon_modified_date_text)
> assert (
reusables.current_date() == page.my_addons_list[0].my_addon_modified_date_text
)
E AssertionError: assert 'Feb #d, 2026' == 'Feb 2, 2026'
E - Feb 2, 2026
E ? ^
E + Feb #d, 2026
E ? ^^

tests/devhub_submissions/test_addon_submissions.py:370: AssertionError
------------------------------Captured stdout call------------------------------
Feb 2, 2026
Passed tests/devhub_submissions/test_addon_submissions.py::test_devhub_developer_agreement_page_contents[Desktop]52.2756.86
@@ -478,7 +478,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_devhub_developer_agreement_page_links[Desktop]50.2757.42
@@ -489,7 +489,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_devhub_developer_agreement_checkboxes[Desktop]46.3553.65
@@ -500,7 +500,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_submit_listed_wizard_theme_tc_id_c97500[Desktop]117.69126.31
@@ -511,7 +511,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_submit_unlisted_addon_tc_id_c14886[Desktop]106.67112.74
@@ -522,7 +522,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_addon_distribution_page_contents_tc_id_c14882[Desktop]11.7818.63
@@ -531,7 +531,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_devhub_upload_extension_page_contents[Desktop]7.1913.19
@@ -540,7 +540,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_upload_unsupported_file_validation_error[Desktop]18.2324.62
@@ -549,7 +549,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_verify_first_version_autoapproval[Desktop]82.5729.59
@@ -558,7 +558,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_submit_listed_addon_tc_id_c4369[Desktop]40.1546.73
@@ -567,7 +567,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_submit_addon_3mb_size_tc_id_c2274214[Desktop]39.9946.76
@@ -576,7 +576,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_submit_mixed_addon_versions_tc_id_c14981[Desktop]55.3160.47
@@ -585,19 +585,19 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_verify_new_unlisted_version_autoapproval_tc_id_C4372[Desktop]159.59136.32
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred. -Manifest content: {'manifest_version': 2, 'theme': {'frame': '#083af0', 'tab_background_text': '#ffffff'}, 'version': '1049.0', 'name': 'New version auto-approval'} +Manifest content: {'manifest_version': 2, 'theme': {'frame': '#083af0', 'tab_background_text': '#ffffff'}, 'version': '1061.0', 'name': 'New version auto-approval'}
Passed tests/devhub_submissions/test_addon_submissions.py::test_submit_unicode_addon_tc_id_c4590[Desktop-Chinese characters]29.3536.08
@@ -607,7 +607,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_submit_unicode_addon_tc_id_c4590[Desktop-Arabic characters]29.3935.52
@@ -617,7 +617,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_submit_unicode_addon_tc_id_c4590[Desktop-Korean characters]33.0439.75
@@ -627,7 +627,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_submit_unicode_addon_tc_id_c4590[Desktop-Burmese characters]29.23106.50
@@ -637,7 +637,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_submit_unicode_addon_tc_id_c4590[Desktop-Random non-ascii characters]30.1836.58
@@ -647,7 +647,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_addon_validation_warning_tc_id_c2283005[Desktop]23.4929.11
@@ -656,7 +656,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_cancel_and_disable_version_during_upload[Desktop]28.8934.48
@@ -665,7 +665,7 @@

Results

Passed tests/devhub_submissions/test_addon_submissions.py::test_delete_all_extensions[Desktop]116.63127.19
diff --git a/submissions_user.txt b/submissions_user.txt index 8c8c14ec..b940f809 100644 --- a/submissions_user.txt +++ b/submissions_user.txt @@ -1 +1 @@ -go912fvrcfmexc37lrgbbc3k8kbjsojg \ No newline at end of file +c7f9dtryd7mbgu5if1js6nque559sgdb \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 50a0f5d6..212773f5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -97,7 +97,7 @@ def firefox_options(firefox_options, base_url, variables): "extensions.update.url", variables["extensions_update_url"] ) firefox_options.add_argument("-remote-allow-system-access") - firefox_options.add_argument("-headless") + firefox_options.add_argument("-foreground") firefox_options.log.level = "trace" return firefox_options diff --git a/tests/devhub/test_addon_validate.py b/tests/devhub/test_addon_validate.py index 2dd4f19b..e26f158b 100644 --- a/tests/devhub/test_addon_validate.py +++ b/tests/devhub/test_addon_validate.py @@ -7,7 +7,6 @@ @pytest.mark.sanity @pytest.mark.login("developer") -@pytest.mark.fail def test_validate_addon_listed(selenium, base_url, variables): """Verifies the process of validating a listed addon using the "On This Site" checkbox in the DevHub Addon Validate page. diff --git a/tests/devhub/test_devhub_home.py b/tests/devhub/test_devhub_home.py index 4f33a0d2..fe5361d4 100644 --- a/tests/devhub/test_devhub_home.py +++ b/tests/devhub/test_devhub_home.py @@ -310,6 +310,7 @@ def test_devhub_click_first_theme_button(selenium, base_url, variables): @pytest.mark.nondestructive +@pytest.mark.fail def test_devhub_resources_footer_documentation_links_tc_id_C15072(selenium, base_url, variables): """Verifies that all "Documentation" links in the resources footer lead to the correct pages, confirming that @@ -399,6 +400,7 @@ def test_devhub_resources_join_addon_review(selenium, base_url, variables): @pytest.mark.nondestructive +@pytest.mark.fail def test_devhub_resources_participate(selenium, base_url, variables): """Ensures that the "More Ways to Participate" link in the resources section redirects the user to the @@ -556,7 +558,7 @@ def test_devhub_addons_footer_links(base_url, selenium, count, link): "count, link", enumerate( [ - "en-US/?redirect_source=mozilla-org&utm_campaign=SET_DEFAULT_BROWSER", + "https://www.firefox.com/en-US/?redirect_source=mozilla-org&utm_source=addons.mozilla.org&utm_medium=referral&utm_content=footer-link", "en-US/browsers/mobile/", "en-US/browsers/enterprise/", ] @@ -568,6 +570,7 @@ def test_devhub_addons_footer_links(base_url, selenium, count, link): ], ) @pytest.mark.nondestructive +@pytest.mark.fail def test_devhub_browsers_footer_links(base_url, selenium, count, link): """Verifies that the links under the "Browsers" section in the DevHub footer lead to the correct pages @@ -581,7 +584,7 @@ def test_devhub_browsers_footer_links(base_url, selenium, count, link): "count, link", enumerate( [ - "en-US/?utm_campaign=SET_DEFAULT_BROWSER", + "https://www.firefox.com/en-US/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=footer-link", "products/vpn/", "relay.firefox.com/", "monitor.mozilla", @@ -597,6 +600,7 @@ def test_devhub_browsers_footer_links(base_url, selenium, count, link): ], ) @pytest.mark.nondestructive +@pytest.mark.fail def test_devhub_products_footer_links(base_url, selenium, count, link): """Ensures that the links under the "Products" section in the DevHub footer lead to the correct pages for diff --git a/tests/frontend/test_addon_detail.py b/tests/frontend/test_addon_detail.py index e9b670a7..41396cf7 100644 --- a/tests/frontend/test_addon_detail.py +++ b/tests/frontend/test_addon_detail.py @@ -326,7 +326,6 @@ def test_contribute_button_tc_id_c4402(selenium, base_url, variables): @pytest.mark.nondestructive -@pytest.mark.fail def test_extension_permissions_tc_id_c139966(selenium, base_url, variables): """Tests that extension permissions are displayed correctly.""" extension = variables["detail_extension_slug"] @@ -385,7 +384,7 @@ def test_more_info_version_number(selenium, base_url, variables): @pytest.mark.sanity @pytest.mark.nondestructive -@pytest.mark.fail +@pytest.mark.skip def test_more_info_addon_size(selenium, base_url, variables): """Tests the add-on size value in the 'More Info' section.""" extension = variables["addon_size_extension"] diff --git a/tests/frontend/test_home.py b/tests/frontend/test_home.py index 9d2b9503..d91e09c9 100644 --- a/tests/frontend/test_home.py +++ b/tests/frontend/test_home.py @@ -151,6 +151,7 @@ def test_secondary_hero_modules_tc_id_c95105(base_url, selenium): ) @pytest.mark.sanity @pytest.mark.nondestructive +@pytest.mark.fail def test_click_module_link_tc_id_c95105(base_url, selenium, count, module): """Check that the content linked in the secondary modules is available""" page = Home(selenium, base_url).open().wait_for_page_to_load() @@ -368,10 +369,10 @@ def test_browsers_footer_links_tc_id_c95105(base_url, selenium, count, link): "count, link", enumerate( [ - ["https://www.firefox.com/en-US/?utm_campaign=SET_DEFAULT_BROWSER", ".c-intro-download"], + ["?utm_content=footer-link&utm_medium=referral&utm_source=addons.mozilla.org", ".c-intro-download"], ["products/vpn/", ".c-sub-navigation-title"], ["relay.firefox.com/", ".Layout_logo__V4UCI"], - ["monitor.mozilla", ".PublicShell_logo__vbvvO"], + ["monitor.mozilla", "img[alt='Mozilla Monitor']"], ["getpocket.com", ".logo"], ] ), @@ -385,7 +386,8 @@ def test_browsers_footer_links_tc_id_c95105(base_url, selenium, count, link): ) @pytest.mark.sanity @pytest.mark.nondestructive -def test_products_footer_links_tc_id_c95105(base_url, selenium, count, link): +@pytest.mark.fail +def test_products_footer_links_tc_id_c95105(base_url, selenium, count, link, wait): page = Home(selenium, base_url).open().wait_for_page_to_load() page.footer.products_links[count].click() time.sleep(2) diff --git a/tests/frontend/test_users.py b/tests/frontend/test_users.py index e9ba50fa..eb6bab2d 100644 --- a/tests/frontend/test_users.py +++ b/tests/frontend/test_users.py @@ -163,6 +163,7 @@ def test_user_mandatory_notifications(base_url, selenium): @pytest.mark.sanity @pytest.mark.serial @pytest.mark.login("reusable_user") +@pytest.mark.skip def test_user_edit_profile_tc_id_c4607(base_url, selenium, variables): """Verifies that a user can edit their profile, upload a picture, and see the changes reflected.""" @@ -188,6 +189,7 @@ def test_user_edit_profile_tc_id_c4607(base_url, selenium, variables): @pytest.mark.sanity @pytest.mark.serial @pytest.mark.create_session("reusable_user") +@pytest.mark.skip def test_user_view_profile_tc_id_c452203(base_url, selenium, variables): """Confirms that the profile view displays the correct information after editing.""" @@ -209,6 +211,7 @@ def test_user_view_profile_tc_id_c452203(base_url, selenium, variables): @pytest.mark.serial @pytest.mark.create_session("reusable_user") +@pytest.mark.skip def test_user_change_profile_picture(base_url, selenium, wait): """Tests changing and verifying the user's profile picture.""" user = User(selenium, base_url).open().wait_for_page_to_load() @@ -238,6 +241,7 @@ def test_user_change_profile_picture(base_url, selenium, wait): @pytest.mark.serial @pytest.mark.create_session("reusable_user") +@pytest.mark.skip def test_user_delete_profile_picture(base_url, selenium): """Verifies that a user can delete their profile picture and see the default avatar.""" @@ -257,6 +261,7 @@ def test_user_delete_profile_picture(base_url, selenium): @pytest.mark.serial @pytest.mark.create_session("reusable_user") +@pytest.mark.skip def test_user_update_profile(base_url, selenium, variables): """Ensures that a user can update their profile fields, including display name, biography, and location.""" @@ -281,6 +286,7 @@ def test_user_update_profile(base_url, selenium, variables): @pytest.mark.serial @pytest.mark.create_session("reusable_user") +@pytest.mark.skip def test_user_update_url(base_url, selenium, variables): """Tests that the user’s homepage URL field is validated for correctness.""" user = User(selenium, base_url).open().wait_for_page_to_load() @@ -314,6 +320,7 @@ def test_user_update_url(base_url, selenium, variables): @pytest.mark.sanity @pytest.mark.serial @pytest.mark.create_session("reusable_user") +@pytest.mark.skip def test_user_delete_profile_tc_id_c4393(base_url, selenium): """Verifies that a user can delete their account and be redirected to the homepage.""" @@ -332,6 +339,7 @@ def test_user_delete_profile_tc_id_c4393(base_url, selenium): @pytest.mark.serial @pytest.mark.login("reusable_user") +@pytest.mark.skip def test_user_account_manage_section(base_url, selenium, variables): """Confirms that the correct email is displayed in the account management section.""" @@ -350,6 +358,7 @@ def test_user_account_manage_section(base_url, selenium, variables): @pytest.mark.serial @pytest.mark.create_session("reusable_user") +@pytest.mark.skip def test_user_data_for_deleted_profile(base_url, selenium): """When a profile is deleted from AMO, the user data is deleted. However, the FxA account for that user still exists, so they can log into AMO @@ -365,6 +374,7 @@ def test_user_data_for_deleted_profile(base_url, selenium): @pytest.mark.nondestructive @pytest.mark.create_session("reusable_user") @pytest.mark.clear_session +@pytest.mark.skip def test_user_regular_has_no_role(base_url, selenium): """Verifies that regular users do not see role badges in their profile.""" Home(selenium, base_url).open().wait_for_page_to_load() @@ -378,6 +388,7 @@ def test_user_regular_has_no_role(base_url, selenium): @pytest.mark.serial +@pytest.mark.skip def test_user_regular_notifications(base_url, selenium, variables): """Ensures that regular users can opt in/out of only the basic notifications.""" user = User(selenium, base_url).open().wait_for_page_to_load() diff --git a/user-test-results.html b/user-test-results.html index 459ef1ad..0307fad7 100644 --- a/user-test-results.html +++ b/user-test-results.html @@ -429,10 +429,10 @@ }

user-test-results.html

-

Report generated on 17-Nov-2025 at 16:05:10 by pytest-html v3.1.1

+

Report generated on 28-Jan-2026 at 18:22:03 by pytest-html v3.1.1

Summary

-

1 tests ran in 128.51 seconds.

- 1 passed, 0 skipped, 0 failed, 0 errors, 0 expected failures, 0 unexpected passes, 0 rerun +

15 tests ran in 905.14 seconds.

+ 6 passed, 0 skipped, 9 failed, 3 errors, 0 expected failures, 0 unexpected passes, 0 rerun

Results

@@ -443,14 +443,194 @@

Results

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + +
Links
Errortests/frontend/test_users.py::test_user_menu_click_user_menu_links_tc_id_c95102[Desktop]::setup74.53
+
+
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="64c51498-08b5-4583-b0ef-75f324ec7711")>, base_url = 'https://addons.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_user_menu_click_user_menu_links_tc_id_c95102[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:146:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:92: in account
self.fxa_login(
pages/desktop/frontend/login.py:205: in fxa_login
self.wait.until(EC.url_contains("signin_totp_code"))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="64c51498-08b5-4583-b0ef-75f324ec7711")>, method = <function url_contains.<locals>._predicate at 0x105a284a0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
+The "click continue button" event occurred. +
Errortests/frontend/test_users.py::test_user_edit_profile_tc_id_c4607[Desktop]::setup75.30
+
+
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="8689dc5c-d805-434e-ac90-857168cd7606")>, base_url = 'https://addons.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_user_edit_profile_tc_id_c4607[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:146:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:87: in account
self.fxa_login(self.REUSABLE_USER_EMAIL, self.REUSABLE_USER_PASSWORD, "")
pages/desktop/frontend/login.py:223: in fxa_login
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="8689dc5c-d805-434e-ac90-857168cd7606")>, method = <function url_contains.<locals>._predicate at 0x105873ec0>
message = 'AMO could not be loaded in https://accounts.firefox.com/oauth/signin?client_id=1e5a77cf09e5b4b5&scope=profile%2Bopeni...28282f7ea3fa672695faa90ac7949c5578ba7aa41f20e%3AL2VuLVVTL2ZpcmVmb3gv&access_type=offline. Response status code was 200'

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message: AMO could not be loaded in https://accounts.firefox.com/oauth/signin?client_id=1e5a77cf09e5b4b5&scope=profile%2Bopenid&state=70ea0c420dc84f5eed528282f7ea3fa672695faa90ac7949c5578ba7aa41f20e%3AL2VuLVVTL2ZpcmVmb3gv&access_type=offline. Response status code was 200

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
+The "click continue button" event occurred. +
Errortests/frontend/test_users.py::test_user_account_manage_section[Desktop]::setup76.11
+
+
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="acd4739b-1712-46b1-acba-0a651a093a66")>, base_url = 'https://addons.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_user_account_manage_section[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:146:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:87: in account
self.fxa_login(self.REUSABLE_USER_EMAIL, self.REUSABLE_USER_PASSWORD, "")
pages/desktop/frontend/login.py:223: in fxa_login
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="acd4739b-1712-46b1-acba-0a651a093a66")>, method = <function url_contains.<locals>._predicate at 0x1059d3600>
message = 'AMO could not be loaded in https://accounts.firefox.com/oauth/signin?client_id=1e5a77cf09e5b4b5&scope=profile%2Bopeni...638c97e745d7b5eba962c46e7e3567f9c68b42845c56f%3AL2VuLVVTL2ZpcmVmb3gv&access_type=offline. Response status code was 200'

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message: AMO could not be loaded in https://accounts.firefox.com/oauth/signin?client_id=1e5a77cf09e5b4b5&scope=profile%2Bopenid&state=7b832d30bb6e7172b3d638c97e745d7b5eba962c46e7e3567f9c68b42845c56f%3AL2VuLVVTL2ZpcmVmb3gv&access_type=offline. Response status code was 200

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
+The "click continue button" event occurred. +
Failedtests/frontend/test_users.py::test_user_menu_edit_profile_tc_id_c95102[Desktop]74.64
+
+
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="9ad193f5-6823-466c-98a4-ff0d5a36c1f5")>

@pytest.mark.sanity
@pytest.mark.serial
@pytest.mark.nondestructive
def test_user_menu_edit_profile_tc_id_c95102(base_url, selenium):
"""Ensures that the "Edit Profile" option
in the user menu works and redirects to the correct page."""
page = Home(selenium, base_url).open().wait_for_page_to_load()
> page.login("regular_user")

tests/frontend/test_users.py:76:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/base.py:91: in login
fxa.account(user)
pages/desktop/frontend/login.py:166: in account
self.fxa_login(self.REGULAR_USER_EMAIL, self.REGULAR_USER_PASSWORD, "")
pages/desktop/frontend/login.py:223: in fxa_login
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="9ad193f5-6823-466c-98a4-ff0d5a36c1f5")>, method = <function url_contains.<locals>._predicate at 0x105926700>
message = 'AMO could not be loaded in https://accounts.firefox.com/oauth/signin?client_id=1e5a77cf09e5b4b5&scope=profile%2Bopeni...1793eed2856df173200f7d64ba768b5bab2c707ec64d0%3AL2VuLVVTL2ZpcmVmb3gv&access_type=offline. Response status code was 200'

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message: AMO could not be loaded in https://accounts.firefox.com/oauth/signin?client_id=1e5a77cf09e5b4b5&scope=profile%2Bopenid&state=8534b21d25aefb645921793eed2856df173200f7d64ba768b5bab2c707ec64d0%3AL2VuLVVTL2ZpcmVmb3gv&access_type=offline. Response status code was 200

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
------------------------------Captured stdout call------------------------------
+The "click continue button" event occurred. +
Failedtests/frontend/test_users.py::test_user_developer_notifications[Desktop]43.73
+
+
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="4f05eb89-2360-4fab-8b55-72d430e67bd3")>
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{446900e4-71c2-419f-a6a7-df9c091e268b}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x105a6c0d0>

@pytest.mark.serial
@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_user_developer_notifications(base_url, selenium, variables, wait):
"""Validates the notifications settings for a
developer user, ensuring all available options are listed."""
Home(selenium, base_url).open().wait_for_page_to_load()
user = User(selenium, base_url).open().wait_for_page_to_load()
# verifies that information messages about the scope of notifications are displayed
> assert variables["notifications_info_text"] in user.edit.notifications_info_text

tests/frontend/test_users.py:130:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/users.py:731: in notifications_info_text
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="4f05eb89-2360-4fab-8b55-72d430e67bd3")>, method = <function visibility_of_element_located.<locals>._predicate at 0x1058716c0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:202:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:555:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failedtests/frontend/test_users.py::test_user_mandatory_notifications[Desktop]43.25
+
+
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="35540115-705d-4091-9696-ee495739b7bd")>

@pytest.mark.serial
@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_user_mandatory_notifications(base_url, selenium):
"""Ensures that mandatory notifications for developers cannot be unchecked."""
Home(selenium, base_url).open().wait_for_page_to_load()
user = User(selenium, base_url).open().wait_for_page_to_load()
# notifications 5 to 7 are mandatory for developers; clicking the checkboxes should have no effect
> for checkbox in user.edit.notifications_checkbox[4:7]:

tests/frontend/test_users.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/users.py:741: in notifications_checkbox
message=f"There were {len(self.notification_text)} notifications displayed, expected 8",
pages/desktop/frontend/users.py:747: in notification_text
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="35540115-705d-4091-9696-ee495739b7bd")>, method = <function visibility_of_element_located.<locals>._predicate at 0x105a299e0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:202:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:555:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failedtests/frontend/test_users.py::test_user_view_profile_tc_id_c452203[Desktop]32.65
+
+
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="300d0683-3527-44be-a291-f9c33452bdf1")>
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{446900e4-71c2-419f-a6a7-df9c091e268b}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}

@pytest.mark.sanity
@pytest.mark.serial
@pytest.mark.create_session("reusable_user")
def test_user_view_profile_tc_id_c452203(base_url, selenium, variables):
"""Confirms that the profile view displays
the correct information after editing."""
user = User(selenium, base_url).open().wait_for_page_to_load()
# opens the View profile page
> user.edit.click_view_profile_link()

tests/frontend/test_users.py:196:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/users.py:568: in click_view_profile_link
).until(EC.element_to_be_clickable(self._view_profile_link_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="300d0683-3527-44be-a291-f9c33452bdf1")>, method = <function element_to_be_clickable.<locals>._predicate at 0x105924900>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:202:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:555:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failedtests/frontend/test_users.py::test_user_change_profile_picture[Desktop]32.19
+
+
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="c3e25b27-b73b-466d-afb5-58ee0285eeef")>
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x105b24550>

@pytest.mark.serial
@pytest.mark.create_session("reusable_user")
def test_user_change_profile_picture(base_url, selenium, wait):
"""Tests changing and verifying the user's profile picture."""
user = User(selenium, base_url).open().wait_for_page_to_load()
# opens the View profile page
> user.edit.click_view_profile_link()

tests/frontend/test_users.py:216:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/users.py:568: in click_view_profile_link
).until(EC.element_to_be_clickable(self._view_profile_link_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="c3e25b27-b73b-466d-afb5-58ee0285eeef")>, method = <function element_to_be_clickable.<locals>._predicate at 0x105873c40>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:202:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:555:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failedtests/frontend/test_users.py::test_user_delete_profile_picture[Desktop]11.99
+
+
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="779919bc-4397-4eed-8f44-7dd279c02152")>

@pytest.mark.serial
@pytest.mark.create_session("reusable_user")
def test_user_delete_profile_picture(base_url, selenium):
"""Verifies that a user can delete their
profile picture and see the default avatar."""
user = User(selenium, base_url).open().wait_for_page_to_load()
> user.edit.delete_profile_picture()

tests/frontend/test_users.py:245:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/users.py:689: in delete_profile_picture
self.find_element(*self._delete_picture_button_locator).click()
venv/lib/python3.11/site-packages/pypom/region.py:106: in find_element
return self.driver_adapter.find_element(strategy, locator, root=self.root)
venv/lib/python3.11/site-packages/pypom/selenium_driver.py:61: in find_element
return self.driver.find_element(strategy, locator)
venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py:856: in find_element
return self.execute(Command.FIND_ELEMENT, {
venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py:429: in execute
self.error_handler.check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x105cbf9d0>
response = {'status': 404, 'value': '{"value":{"error":"no such element","message":"Unable to locate element: .UserProfileEditPic.../content/shared/webdriver/Errors.sys.mjs:555:5\\ndom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16\\n"}}'}

def check_response(self, response: Dict[str, Any]) -> None:
"""
Checks that a JSON response from the WebDriver does not have an error.

:Args:
- response - The JSON response from the WebDriver server as a dictionary
object.

:Raises: If the response contains an error message.
"""
status = response.get('status', None)
if not status or status == ErrorCode.SUCCESS:
return
value = None
message = response.get("message", "")
screen: str = response.get("screen", "")
stacktrace = None
if isinstance(status, int):
value_json = response.get('value', None)
if value_json and isinstance(value_json, str):
import json
try:
value = json.loads(value_json)
if len(value.keys()) == 1:
value = value['value']
status = value.get('error', None)
if not status:
status = value.get("status", ErrorCode.UNKNOWN_ERROR)
message = value.get("value") or value.get("message")
if not isinstance(message, str):
value = message
message = message.get('message')
else:
message = value.get('message', None)
except ValueError:
pass

exception_class: Type[WebDriverException]
if status in ErrorCode.NO_SUCH_ELEMENT:
exception_class = NoSuchElementException
elif status in ErrorCode.NO_SUCH_FRAME:
exception_class = NoSuchFrameException
elif status in ErrorCode.NO_SUCH_SHADOW_ROOT:
exception_class = NoSuchShadowRootException
elif status in ErrorCode.NO_SUCH_WINDOW:
exception_class = NoSuchWindowException
elif status in ErrorCode.STALE_ELEMENT_REFERENCE:
exception_class = StaleElementReferenceException
elif status in ErrorCode.ELEMENT_NOT_VISIBLE:
exception_class = ElementNotVisibleException
elif status in ErrorCode.INVALID_ELEMENT_STATE:
exception_class = InvalidElementStateException
elif status in ErrorCode.INVALID_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPER:
exception_class = InvalidSelectorException
elif status in ErrorCode.ELEMENT_IS_NOT_SELECTABLE:
exception_class = ElementNotSelectableException
elif status in ErrorCode.ELEMENT_NOT_INTERACTABLE:
exception_class = ElementNotInteractableException
elif status in ErrorCode.INVALID_COOKIE_DOMAIN:
exception_class = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
elif status in ErrorCode.TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.SCRIPT_TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.UNKNOWN_ERROR:
exception_class = WebDriverException
elif status in ErrorCode.UNEXPECTED_ALERT_OPEN:
exception_class = UnexpectedAlertPresentException
elif status in ErrorCode.NO_ALERT_OPEN:
exception_class = NoAlertPresentException
elif status in ErrorCode.IME_NOT_AVAILABLE:
exception_class = ImeNotAvailableException
elif status in ErrorCode.IME_ENGINE_ACTIVATION_FAILED:
exception_class = ImeActivationFailedException
elif status in ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS:
exception_class = MoveTargetOutOfBoundsException
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
else:
exception_class = WebDriverException
if not value:
value = response['value']
if isinstance(value, str):
raise exception_class(value)
if message == "" and 'message' in value:
message = value['message']

screen = None # type: ignore[assignment]
if 'screen' in value:
screen = value['screen']

stacktrace = None
st_value = value.get('stackTrace') or value.get('stacktrace')
if st_value:
if isinstance(st_value, str):
stacktrace = st_value.split('\n')
else:
stacktrace = []
try:
for frame in st_value:
line = frame.get("lineNumber", "")
file = frame.get("fileName", "<anonymous>")
if line:
file = f"{file}:{line}"
meth = frame.get('methodName', '<anonymous>')
if 'className' in frame:
meth = "{}.{}".format(frame['className'], meth)
msg = " at %s (%s)"
msg = msg % (meth, file)
stacktrace.append(msg)
except TypeError:
pass
if exception_class == UnexpectedAlertPresentException:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: .UserProfileEditPicture-delete-button button
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:202:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:555:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py:243: NoSuchElementException
Failedtests/frontend/test_users.py::test_user_update_profile[Desktop]44.46
+
+
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="3b46678b-6797-454c-b2e8-6e1d686c39f0")>
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{446900e4-71c2-419f-a6a7-df9c091e268b}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}

@pytest.mark.serial
@pytest.mark.create_session("reusable_user")
def test_user_update_profile(base_url, selenium, variables):
"""Ensures that a user can update their profile fields,
including display name, biography, and location."""
user = User(selenium, base_url).open().wait_for_page_to_load()
updated_name = "new_display_name"
# update field
> user.edit.display_name_field.clear()

tests/frontend/test_users.py:266:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/users.py:616: in display_name_field
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="3b46678b-6797-454c-b2e8-6e1d686c39f0")>, method = <function visibility_of_element_located.<locals>._predicate at 0x105925c60>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:202:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:555:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failedtests/frontend/test_users.py::test_user_update_url[Desktop]42.25
+
+
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="6757fc4e-6189-42b5-b3ab-3890dc7c1013")>
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{446900e4-71c2-419f-a6a7-df9c091e268b}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}

@pytest.mark.serial
@pytest.mark.create_session("reusable_user")
def test_user_update_url(base_url, selenium, variables):
"""Tests that the user’s homepage URL field is validated for correctness."""
user = User(selenium, base_url).open().wait_for_page_to_load()
initial_page_url = selenium.current_url
# test not a URL, this should not pass the client validation
# it should not submit, red error message should not be displayed
> user.edit.homepage_link_field.clear()

tests/frontend/test_users.py:290:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/users.py:629: in homepage_link_field
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="6757fc4e-6189-42b5-b3ab-3890dc7c1013")>, method = <function visibility_of_element_located.<locals>._predicate at 0x105aba840>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:202:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:555:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failedtests/frontend/test_users.py::test_user_delete_profile_tc_id_c4393[Desktop]42.39
+
+
base_url = 'https://addons.allizom.org', selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="0181e215-8cf8-4beb-981d-6f024e212611")>

@pytest.mark.sanity
@pytest.mark.serial
@pytest.mark.create_session("reusable_user")
def test_user_delete_profile_tc_id_c4393(base_url, selenium):
"""Verifies that a user can delete their
account and be redirected to the homepage."""
user = User(selenium, base_url).open().wait_for_page_to_load()
> user.edit.delete_account()

tests/frontend/test_users.py:321:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/users.py:787: in delete_account
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="0181e215-8cf8-4beb-981d-6f024e212611")>, method = <function element_to_be_clickable.<locals>._predicate at 0x105aba020>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:202:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:555:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Passedtests/frontend/test_users.py::test_login[Desktop]51.45
+
------------------------------Captured stdout call------------------------------
+The "click continue button" event occurred. +
Passedtests/frontend/test_users.py::test_logout_tc_id_c95092[Desktop]60.39
+
------------------------------Captured stdout call------------------------------
+The "click continue button" event occurred. +
Passedtests/frontend/test_users.py::test_user_menu_collections_link_tc_id_c95102[Desktop]54.49
+
------------------------------Captured stdout call------------------------------
+The "click continue button" event occurred. +
Passedtests/frontend/test_users.py::test_user_account_manage_section[Desktop]128.44tests/frontend/test_users.py::test_user_menu_view_profile_tc_id_c95102[Desktop]54.54
-
-----------------------------Captured stdout setup------------------------------
+
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred. -
\ No newline at end of file +
Passedtests/frontend/test_users.py::test_register_new_account[Desktop]64.79
+
------------------------------Captured stdout call------------------------------
+
Passedtests/frontend/test_users.py::test_user_data_for_deleted_profile[Desktop]12.21
+
No log output captured.
\ No newline at end of file