From ef3546c1dff7d968cfa9330916bc284346649f0f Mon Sep 17 00:00:00 2001 From: Pavel Novotny Date: Thu, 23 May 2024 13:45:08 +0200 Subject: [PATCH] session: execute browser teardown only once (#1390) The browser teardown in `airgun.session.Session.__exit__` should be executed only once. Because when `Session` is nested in multiple context managers(*), the `__exit__` method is called for each one and this causes that the second and further `webdriver.quit()` call will fail, because the browser session was already stopped. (*) for example in the robottelo `session` fixture in `robottelo/pytest_fixtures/core/ui.py`. (cherry picked from commit d9cfc90603fc65492cb953383f89c22c8fb5c6c9) --- airgun/session.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airgun/session.py b/airgun/session.py index 0da7809aa..7c117adbd 100644 --- a/airgun/session.py +++ b/airgun/session.py @@ -228,7 +228,7 @@ def __exit__(self, exc_type, exc_value, traceback): not risen not to shadow real session result. """ if self.browser is None: - # browser was never started, don't do anything + # browser hasn't been started or was already closed, don't do anything return LOGGER.info('Stopping UI session %r for user %r', self.name, self._user) passed = True if exc_type is None else False @@ -238,7 +238,7 @@ def __exit__(self, exc_type, exc_value, traceback): except Exception as err: # - TODO: fix bare except LOGGER.exception(err) finally: - self._factory.finalize(passed) + self.browser = self._factory.finalize(passed) def _open(self, entity): """Initializes requested entity. If this is first time session