Skip to content

Commit 1e518ac

Browse files
fixed all review comments
1 parent da5e14d commit 1e518ac

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

py/conftest.py

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ def pytest_ignore_collect(path, config):
9898

9999

100100
driver_instance = None
101+
selenium_driver = None
101102

102103

103104
class Driver:
@@ -185,8 +186,7 @@ def service(self):
185186

186187
@property
187188
def driver(self):
188-
if not self._driver:
189-
self._driver = self._initialize_driver()
189+
self._driver = self._initialize_driver()
190190
return self._driver
191191

192192
def _initialize_driver(self):
@@ -196,12 +196,26 @@ def _initialize_driver(self):
196196
self.kwargs["service"] = self.service
197197
return getattr(webdriver, self._driver_class)(**self.kwargs)
198198

199+
@property
200+
def stop_driver(self):
201+
def fin():
202+
global driver_instance
203+
if self._driver is not None:
204+
self._driver.quit()
205+
self._driver = None
206+
driver_instance = None
207+
208+
return fin
209+
199210

200211
@pytest.fixture(scope="function")
201212
def driver(request):
202213
global driver_instance
214+
global selenium_driver
203215
driver_class = getattr(request, "param", "Chrome").capitalize()
204-
selenium_driver = Driver(driver_class, request)
216+
217+
if selenium_driver is None:
218+
selenium_driver = Driver(driver_class, request)
205219

206220
# skip tests if not available on the platform
207221
if driver_class.lower() == "safari" and selenium_driver.exe_platform != "Darwin":
@@ -210,9 +224,9 @@ def driver(request):
210224
pytest.skip("IE and EdgeHTML Tests can only run on Windows")
211225
if "webkit" in driver_class.lower() and selenium_driver.exe_platform != "Linux":
212226
pytest.skip("Webkit tests can only run on Linux")
213-
# conditionally mark tests as expected to fail based on driver
214-
marker = request.node.get_closest_marker(f"xfail_{driver_class.lower()}")
215227

228+
# conditionally mark tests as expected to fail based on driver
229+
marker = request.node.get_closest_marker(f"xfail_{driver_class.lower()}")
216230
if marker is not None:
217231
if "run" in marker.kwargs:
218232
if marker.kwargs["run"] is False:
@@ -223,11 +237,12 @@ def driver(request):
223237
marker.kwargs.pop("raises")
224238
pytest.xfail(**marker.kwargs)
225239

226-
driver_instance = selenium_driver.driver
240+
selenium_driver.addfinalizer(selenium_driver.stop_driver)
227241

228-
yield driver_instance
242+
if driver_instance is None:
243+
driver_instance = selenium_driver.driver
229244

230-
driver_instance.quit()
245+
yield driver_instance
231246

232247

233248
@pytest.fixture(scope="session", autouse=True)

0 commit comments

Comments
 (0)