diff options
Diffstat (limited to 'testing/web-platform/mozilla/tests/webdriver/bidi/conftest.py')
-rw-r--r-- | testing/web-platform/mozilla/tests/webdriver/bidi/conftest.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/testing/web-platform/mozilla/tests/webdriver/bidi/conftest.py b/testing/web-platform/mozilla/tests/webdriver/bidi/conftest.py new file mode 100644 index 0000000000..4bd63c8df7 --- /dev/null +++ b/testing/web-platform/mozilla/tests/webdriver/bidi/conftest.py @@ -0,0 +1,93 @@ +import pytest +import pytest_asyncio +from webdriver.bidi.client import BidiSession + + +@pytest.fixture +def match_capabilities(add_browser_capabilities): + def match_capabilities(match_type, capability_key, capability_value): + capability = {} + capability[capability_key] = capability_value + capabilities = add_browser_capabilities(capability) + if match_type == "firstMatch": + capabilities = [capabilities] + + capabilities_params = {} + capabilities_params[match_type] = capabilities + + return capabilities_params + + return match_capabilities + + +@pytest_asyncio.fixture +async def bidi_client(browser): + bidi_session = None + current_browser = browser(use_bidi=True) + + async def bidi_client(capabilities={}): + nonlocal current_browser + + # Launch the browser again if it's not running. + if current_browser.is_running is False: + current_browser = browser(use_bidi=True) + + server_host = current_browser.remote_agent_host + server_port = current_browser.remote_agent_port + + nonlocal bidi_session + + bidi_session = BidiSession.bidi_only( + f"ws://{server_host}:{server_port}", requested_capabilities=capabilities + ) + bidi_session.current_browser = current_browser + + await bidi_session.start_transport() + + return bidi_session + + yield bidi_client + + if bidi_session is not None: + await bidi_session.end() + + +@pytest_asyncio.fixture +async def new_session(bidi_client): + """Start bidi client and create a new session. + At the moment, it throws an error if the session was already started, + since multiple sessions are not supported. + """ + bidi_session = None + + async def new_session(capabilities): + nonlocal bidi_session + + bidi_session = await bidi_client(capabilities) + await bidi_session.start() + + return bidi_session + + yield new_session + + # Check if the browser, the session or websocket connection was not closed already. + if ( + bidi_session is not None + and bidi_session.current_browser.is_running is True + and bidi_session.session_id is not None + and bidi_session.transport.connection.closed is False + ): + await bidi_session.session.end() + + +@pytest.fixture(name="add_browser_capabilities") +def fixture_add_browser_capabilities(configuration): + def add_browser_capabilities(capabilities): + # Make sure there aren't keys in common. + assert not set(configuration["capabilities"]).intersection(set(capabilities)) + result = dict(configuration["capabilities"]) + result.update(capabilities) + + return result + + return add_browser_capabilities |