async def session(capabilities, configuration, request): """Create and start a session for a test that does not itself test session creation. By default the session will stay open after each test, but we always try to start a new one and assume that if that fails there is already a valid session. This makes it possible to recover from some errors that might leave the session in a bad state, but does not demand that we start a new session per test.""" global _current_session # Update configuration capabilities with custom ones from the # capabilities fixture, which can be set by tests caps = copy.deepcopy(configuration["capabilities"]) deep_update(caps, capabilities) caps = {"alwaysMatch": caps} await reset_current_session_if_necessary(caps, False) if _current_session is None: _current_session = webdriver.Session(configuration["host"], configuration["port"], capabilities=caps) try: _current_session.start() except webdriver.error.SessionNotCreatedException: if not _current_session.session_id: raise # Enforce a fixed default window size and position _current_session.window.size = defaults.WINDOW_SIZE _current_session.window.position = defaults.WINDOW_POSITION yield _current_session cleanup_session(_current_session)
async def session(capabilities, configuration, request, bidi): """Create and start a session for a test that does not itself test session creation. By default the session will stay open after each test, but we always try to start a new one and assume that if that fails there is already a valid session. This makes it possible to recover from some errors that might leave the session in a bad state, but does not demand that we start a new session per test.""" global _current_session # Update configuration capabilities with custom ones from the # capabilities fixture, which can be set by tests caps = copy.deepcopy(configuration["capabilities"]) deep_update(caps, capabilities) caps = {"alwaysMatch": caps} is_cur_bidi = isinstance(_current_session, webdriver.BidiSession) # If there is a session with different capabilities active or the current session # is of different type than the one we would like to create, end it now. if _current_session is not None and ((not _current_session.match(caps)) or (is_cur_bidi != bidi)): if is_cur_bidi: await _current_session.end() else: _current_session.end() _current_session = None if _current_session is None: if bidi: _current_session = webdriver.BidiSession(configuration["host"], configuration["port"], capabilities=caps) else: _current_session = webdriver.Session(configuration["host"], configuration["port"], capabilities=caps) try: if type(_current_session) == webdriver.BidiSession: await _current_session.start() else: _current_session.start() except webdriver.error.SessionNotCreatedException: if not _current_session.session_id: raise # Enforce a fixed default window size and position _current_session.window.size = defaults.WINDOW_SIZE _current_session.window.position = defaults.WINDOW_POSITION yield _current_session cleanup_session(_current_session)
async def bidi_session(capabilities, configuration): """Create and start a bidi session. Can be used for a test that does not itself test bidi session creation. By default the session will stay open after each test, but we always try to start a new one and assume that if that fails there is already a valid session. This makes it possible to recover from some errors that might leave the session in a bad state, but does not demand that we start a new session per test. """ global _current_session # Update configuration capabilities with custom ones from the # capabilities fixture, which can be set by tests caps = copy.deepcopy(configuration["capabilities"]) caps.update({"webSocketUrl": True}) deep_update(caps, capabilities) caps = {"alwaysMatch": caps} await reset_current_session_if_necessary(caps) if _current_session is None: _current_session = webdriver.Session(configuration["host"], configuration["port"], capabilities=caps, enable_bidi=True) _current_session.start() await _current_session.bidi_session.start() # Enforce a fixed default window size and position if _current_session.capabilities.get("setWindowRect"): _current_session.window.size = defaults.WINDOW_SIZE _current_session.window.position = defaults.WINDOW_POSITION yield _current_session.bidi_session await _current_session.bidi_session.end() cleanup_session(_current_session)