2323import  pytest 
2424
2525from  selenium  import  webdriver 
26+ from  selenium .common .exceptions  import  WebDriverException 
2627from  selenium .webdriver .remote .server  import  Server 
2728from  test .selenium .webdriver .common .network  import  get_lan_ip 
2829from  test .selenium .webdriver .common .webserver  import  SimpleWebServer 
@@ -101,7 +102,6 @@ def pytest_generate_tests(metafunc):
101102        metafunc .parametrize ("driver" , metafunc .config .option .drivers , indirect = True )
102103
103104
104- driver_instance  =  None 
105105selenium_driver  =  None 
106106
107107
@@ -276,7 +276,8 @@ def service(self):
276276
277277    @property  
278278    def  driver (self ):
279-         self ._driver  =  self ._initialize_driver ()
279+         if  self ._driver  is  None :
280+             self ._driver  =  self ._initialize_driver ()
280281        return  self ._driver 
281282
282283    @property  
@@ -297,21 +298,15 @@ def _initialize_driver(self):
297298            kwargs ["service" ] =  self .service 
298299        return  getattr (webdriver , self .driver_class )(** kwargs )
299300
300-     @property  
301301    def  stop_driver (self ):
302-         def  fin ():
303-             global  driver_instance 
304-             if  self ._driver  is  not   None :
305-                 self ._driver .quit ()
306-             self ._driver  =  None 
307-             driver_instance  =  None 
308- 
309-         return  fin 
302+         driver_to_stop  =  self ._driver 
303+         self ._driver  =  None 
304+         if  driver_to_stop  is  not   None :
305+             driver_to_stop .quit ()
310306
311307
312308@pytest .fixture (scope = "function" ) 
313309def  driver (request ):
314-     global  driver_instance 
315310    global  selenium_driver 
316311    driver_class  =  getattr (request , "param" , "Chrome" ).lower ()
317312
@@ -345,38 +340,43 @@ def driver(request):
345340
346341        request .addfinalizer (selenium_driver .stop_driver )
347342
348-     if  driver_instance  is  None :
349-         driver_instance  =  selenium_driver .driver 
350- 
351-     yield  driver_instance 
352343    # Close the browser after BiDi tests. Those make event subscriptions 
353344    # and doesn't seems to be stable enough, causing the flakiness of the 
354345    # subsequent tests. 
355346    # Remove this when BiDi implementation and API is stable. 
356-     if  selenium_driver .bidi :
347+     if  selenium_driver   is   not   None   and   selenium_driver .bidi :
357348        request .addfinalizer (selenium_driver .stop_driver )
358349
350+     yield  selenium_driver .driver 
351+ 
359352    if  request .node .get_closest_marker ("no_driver_after_test" ):
360-         driver_instance  =  None 
353+         if  selenium_driver  is  not   None :
354+             try :
355+                 selenium_driver .stop_driver ()
356+             except  WebDriverException :
357+                 pass 
358+             except  Exception :
359+                 raise 
360+             selenium_driver  =  None 
361361
362362
363363@pytest .fixture (scope = "session" , autouse = True ) 
364364def  stop_driver (request ):
365365    def  fin ():
366-         global  driver_instance 
367-         if  driver_instance  is  not   None :
368-             driver_instance . quit ()
369-         driver_instance  =  None 
366+         global  selenium_driver 
367+         if  selenium_driver  is  not   None :
368+             selenium_driver . stop_driver ()
369+         selenium_driver  =  None 
370370
371371    request .addfinalizer (fin )
372372
373373
374374def  pytest_exception_interact (node , call , report ):
375375    if  report .failed :
376-         global  driver_instance 
377-         if  driver_instance  is  not   None :
378-             driver_instance . quit ()
379-         driver_instance  =  None 
376+         global  selenium_driver 
377+         if  selenium_driver  is  not   None :
378+             selenium_driver . stop_driver ()
379+         selenium_driver  =  None 
380380
381381
382382@pytest .fixture  
0 commit comments