tests/e2e: fix flaky SAML Source test (#14708)

This commit is contained in:
Jens L.
2025-05-27 13:18:03 +02:00
committed by GitHub
parent c6333f9e19
commit 15d84d30ba
3 changed files with 22 additions and 9 deletions

View File

@ -31,6 +31,8 @@ class PytestTestRunner(DiscoverRunner): # pragma: no cover
if kwargs.get("randomly_seed", None): if kwargs.get("randomly_seed", None):
self.args.append(f"--randomly-seed={kwargs['randomly_seed']}") self.args.append(f"--randomly-seed={kwargs['randomly_seed']}")
if kwargs.get("no_capture", False):
self.args.append("--capture=no")
settings.TEST = True settings.TEST = True
settings.CELERY["task_always_eager"] = True settings.CELERY["task_always_eager"] = True
@ -64,6 +66,11 @@ class PytestTestRunner(DiscoverRunner): # pragma: no cover
"Default behaviour: use random.Random().getrandbits(32), so the seed is" "Default behaviour: use random.Random().getrandbits(32), so the seed is"
"different on each run.", "different on each run.",
) )
parser.add_argument(
"--no-capture",
action="store_true",
help="Disable any capturing of stdout/stderr during tests.",
)
def run_tests(self, test_labels, extra_tests=None, **kwargs): def run_tests(self, test_labels, extra_tests=None, **kwargs):
"""Run pytest and return the exitcode. """Run pytest and return the exitcode.

View File

@ -1,5 +1,6 @@
services: services:
chrome: chrome:
platform: linux/x86_64
image: docker.io/selenium/standalone-chrome:136.0 image: docker.io/selenium/standalone-chrome:136.0
volumes: volumes:
- /dev/shm:/dev/shm - /dev/shm:/dev/shm

View File

@ -166,30 +166,35 @@ class SeleniumTestCase(DockerTestCase, StaticLiveServerTestCase):
print("::group::authentik Logs", file=stderr) print("::group::authentik Logs", file=stderr)
apps.get_app_config("authentik_tenants").ready() apps.get_app_config("authentik_tenants").ready()
self.wait_timeout = 60 self.wait_timeout = 60
self.logger = get_logger()
self.driver = self._get_driver() self.driver = self._get_driver()
self.driver.implicitly_wait(30) self.driver.implicitly_wait(30)
self.wait = WebDriverWait(self.driver, self.wait_timeout) self.wait = WebDriverWait(self.driver, self.wait_timeout)
self.logger = get_logger()
self.user = create_test_admin_user() self.user = create_test_admin_user()
super().setUp() super().setUp()
def _get_driver(self) -> WebDriver: def _get_driver(self) -> WebDriver:
count = 0 count = 0
try: opts = webdriver.ChromeOptions()
opts = webdriver.ChromeOptions() opts.add_argument("--disable-search-engine-choice-screen")
opts.add_argument("--disable-search-engine-choice-screen") # This breaks selenium when running remotely...?
return webdriver.Chrome(options=opts) # opts.set_capability("goog:loggingPrefs", {"browser": "ALL"})
except WebDriverException: opts.add_experimental_option(
pass "prefs",
{
"profile.password_manager_leak_detection": False,
},
)
while count < RETRIES: while count < RETRIES:
try: try:
driver = webdriver.Remote( driver = webdriver.Remote(
command_executor="http://localhost:4444/wd/hub", command_executor="http://localhost:4444/wd/hub",
options=webdriver.ChromeOptions(), options=opts,
) )
driver.maximize_window() driver.maximize_window()
return driver return driver
except WebDriverException: except WebDriverException as exc:
self.logger.warning("Failed to setup webdriver", exc=exc)
count += 1 count += 1
raise ValueError(f"Webdriver failed after {RETRIES}.") raise ValueError(f"Webdriver failed after {RETRIES}.")