@@ -98,6 +98,7 @@ def pytest_ignore_collect(path, config):
9898
9999
100100driver_instance = None
101+ selenium_driver = None
101102
102103
103104class 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" )
201212def 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