conftest.py (2838B)
1 import pytest 2 import pytest_asyncio 3 from webdriver.bidi.client import BidiSession 4 5 6 @pytest.fixture 7 def match_capabilities(add_browser_capabilities): 8 def match_capabilities(match_type, capability_key, capability_value): 9 capability = {} 10 capability[capability_key] = capability_value 11 capabilities = add_browser_capabilities(capability) 12 if match_type == "firstMatch": 13 capabilities = [capabilities] 14 15 capabilities_params = {} 16 capabilities_params[match_type] = capabilities 17 18 return capabilities_params 19 20 return match_capabilities 21 22 23 @pytest_asyncio.fixture 24 async def bidi_client(): 25 bidi_session = None 26 27 async def bidi_client(current_browser, capabilities={}): 28 nonlocal bidi_session 29 30 bidi_session = BidiSession.bidi_only( 31 current_browser.websocket_url, 32 requested_capabilities=capabilities, 33 ) 34 bidi_session.current_browser = current_browser 35 36 await bidi_session.start_transport() 37 38 return bidi_session 39 40 yield bidi_client 41 42 if bidi_session is not None: 43 await bidi_session.end() 44 45 46 @pytest_asyncio.fixture 47 async def new_session(bidi_client, browser): 48 """Start bidi client and create a new session. 49 At the moment, it throws an error if the session was already started, 50 since multiple sessions are not supported. 51 """ 52 bidi_session = None 53 54 async def new_session(capabilities, browser_args=None): 55 nonlocal bidi_session 56 57 browser_args = browser_args or {} 58 current_browser = browser(use_bidi=True, **browser_args) 59 60 bidi_session = await bidi_client(current_browser, capabilities=capabilities) 61 await bidi_session.start() 62 63 return bidi_session 64 65 yield new_session 66 67 # Check if the browser, the session or websocket connection was not closed already. 68 if ( 69 bidi_session is not None 70 and bidi_session.current_browser.is_running is True 71 and bidi_session.session_id is not None 72 and bidi_session.transport.connection.closed is False 73 ): 74 await bidi_session.session.end() 75 76 77 @pytest.fixture(name="add_browser_capabilities") 78 def fixture_add_browser_capabilities(configuration): 79 def add_browser_capabilities(capabilities): 80 # Make sure there aren't keys in common. 81 assert not set(configuration["capabilities"]).intersection(set(capabilities)) 82 result = dict(configuration["capabilities"]) 83 result.update(capabilities) 84 85 return result 86 87 return add_browser_capabilities 88 89 90 @pytest_asyncio.fixture 91 async def chrome_context(bidi_session): 92 parent_contexts = await bidi_session.browsing_context.get_tree( 93 max_depth=0, _extension_params={"moz:scope": "chrome"} 94 ) 95 96 assert len(parent_contexts) > 0 97 98 return parent_contexts[0]