def _driver_manager(request): """ Provides an instance of BaseDriver as a fixture to allow use of other fixtures. Mimics the set for the built-in sb fixture from SeleniumBase so that certain SeleniumBase features work properly, like screenshots at end of tests & on failure. """ if request.cls: request.cls.sb = BaseDriver('base_method') request.cls.sb.setUpClass() request.cls.sb.setUp() request.cls.sb._needs_tearDown = True sb_config._sb_node[request.node.nodeid] = request.cls.sb yield request.cls.sb if request.cls.sb._needs_tearDown: request.cls.sb.tearDown() request.cls.sb._needs_tearDown = False else: rdriver = BaseDriver('base_method') rdriver.setUpClass() rdriver.setUp() rdriver._needs_tearDown = True sb_config._sb_node[request.node.nodeid] = rdriver yield rdriver if rdriver._needs_tearDown: rdriver.tearDown() rdriver._needs_tearDown = False