From 170685c806fc26a58710906dec7714ce5268d3cc Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 25 Jul 2024 12:18:20 -0700 Subject: [PATCH] tests: functional: Handle click failure when waiting for page update When a click fails because the element is obscured or out of scroll port, the fails with ElementClickInterceptedException. This normally fails the test properly. However, when waiting for a page update, the wait loop silently swallows the error causing the click failure to be ignored. This later leads to a timeout waiting for page to be updated. Handling this error separately and re-raising it ensures that the test fails with the correct error allowing us to fix the problem. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/tests/functional/__init__.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plinth/tests/functional/__init__.py b/plinth/tests/functional/__init__.py index c08d7753e..dfe2c70c1 100644 --- a/plinth/tests/functional/__init__.py +++ b/plinth/tests/functional/__init__.py @@ -15,7 +15,8 @@ from contextlib import contextmanager import pytest import requests -from selenium.common.exceptions import (StaleElementReferenceException, +from selenium.common.exceptions import (ElementClickInterceptedException, + StaleElementReferenceException, WebDriverException) from selenium.webdriver.support.ui import WebDriverWait @@ -131,6 +132,10 @@ def wait_for_page_update(browser, timeout=300, expected_url=None): page_body = browser.find_by_tag('body').first try: yield + except ElementClickInterceptedException: + # When a element that is not visible is clicked, the click is ignored + # and we can't expect a page update. + raise except WebDriverException: # ignore a connection failure which may happen after web server restart pass