Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 26 additions & 26 deletions py/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import pytest

from selenium import webdriver
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.remote.server import Server
from test.selenium.webdriver.common.network import get_lan_ip
from test.selenium.webdriver.common.webserver import SimpleWebServer
Expand Down Expand Up @@ -101,7 +102,6 @@ def pytest_generate_tests(metafunc):
metafunc.parametrize("driver", metafunc.config.option.drivers, indirect=True)


driver_instance = None
selenium_driver = None


Expand Down Expand Up @@ -276,7 +276,8 @@ def service(self):

@property
def driver(self):
self._driver = self._initialize_driver()
if self._driver is None:
self._driver = self._initialize_driver()
return self._driver

@property
Expand All @@ -297,21 +298,15 @@ def _initialize_driver(self):
kwargs["service"] = self.service
return getattr(webdriver, self.driver_class)(**kwargs)

@property
def stop_driver(self):
def fin():
global driver_instance
if self._driver is not None:
self._driver.quit()
self._driver = None
driver_instance = None

return fin
driver_to_stop = self._driver
self._driver = None
if driver_to_stop is not None:
driver_to_stop.quit()


@pytest.fixture(scope="function")
def driver(request):
global driver_instance
global selenium_driver
driver_class = getattr(request, "param", "Chrome").lower()

Expand Down Expand Up @@ -345,38 +340,43 @@ def driver(request):

request.addfinalizer(selenium_driver.stop_driver)

if driver_instance is None:
driver_instance = selenium_driver.driver

yield driver_instance
# Close the browser after BiDi tests. Those make event subscriptions
# and doesn't seems to be stable enough, causing the flakiness of the
# subsequent tests.
# Remove this when BiDi implementation and API is stable.
if selenium_driver.bidi:
if selenium_driver is not None and selenium_driver.bidi:
request.addfinalizer(selenium_driver.stop_driver)

yield selenium_driver.driver

if request.node.get_closest_marker("no_driver_after_test"):
driver_instance = None
if selenium_driver is not None:
try:
selenium_driver.stop_driver()
except WebDriverException:
pass
except Exception:
raise
selenium_driver = None


@pytest.fixture(scope="session", autouse=True)
def stop_driver(request):
def fin():
global driver_instance
if driver_instance is not None:
driver_instance.quit()
driver_instance = None
global selenium_driver
if selenium_driver is not None:
selenium_driver.stop_driver()
selenium_driver = None

request.addfinalizer(fin)


def pytest_exception_interact(node, call, report):
if report.failed:
global driver_instance
if driver_instance is not None:
driver_instance.quit()
driver_instance = None
global selenium_driver
if selenium_driver is not None:
selenium_driver.stop_driver()
selenium_driver = None


@pytest.fixture
Expand Down
Loading