tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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]