diff --git a/tools/webdriver/webdriver/bidi/modules/network.py b/tools/webdriver/webdriver/bidi/modules/network.py index 622f083dc82e93a..56a7da522d562f0 100644 --- a/tools/webdriver/webdriver/bidi/modules/network.py +++ b/tools/webdriver/webdriver/bidi/modules/network.py @@ -66,3 +66,17 @@ def remove_intercept(self, intercept: str) -> Mapping[str, Any]: def fail_request(self, request: str) -> Mapping[str, Any]: params: MutableMapping[str, Any] = {"request": request} return params + + @command + def continue_request(self, request: str, method: Optional[str] = None, url: Optional[str] = None) -> Mapping[str, Any]: + params: MutableMapping[str, Any] = { + "request": request, + } + + if method is not None: + params["method"] = method + + if url is not None: + params["url"] = url + + return params diff --git a/webdriver/tests/bidi/network/continue_request/__init__.py b/webdriver/tests/bidi/network/continue_request/__init__.py new file mode 100644 index 000000000000000..e69de29bb2d1d64 diff --git a/webdriver/tests/bidi/network/continue_request/invalid.py b/webdriver/tests/bidi/network/continue_request/invalid.py new file mode 100644 index 000000000000000..07973724e763f12 --- /dev/null +++ b/webdriver/tests/bidi/network/continue_request/invalid.py @@ -0,0 +1,86 @@ +import asyncio +import pytest +import webdriver.bidi.error as error +from webdriver.bidi.modules.script import ScriptEvaluateResultException + +pytestmark = pytest.mark.asyncio + +PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt" + + +@pytest.mark.parametrize("value", [None, False, 42, {}, []]) +async def test_params_request_invalid_type(bidi_session, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.continue_request(request=value) + + +@pytest.mark.parametrize("value", ["", "foo"]) +async def test_params_request_invalid_value(bidi_session, value): + with pytest.raises(error.NoSuchRequestException): + await bidi_session.network.continue_request(request=value) + + +async def test_params_request_no_such_request(bidi_session, setup_network_test, + wait_for_event, fetch, url): + network_events = await setup_network_test(events=[ + "network.responseCompleted", + ]) + + text_url = url(PAGE_EMPTY_TEXT) + on_response_completed = wait_for_event("network.responseCompleted") + await fetch(text_url) + await on_response_completed + + request = network_events["network.responseCompleted"][0]["request"]["request"] + + with pytest.raises(error.NoSuchRequestException): + await bidi_session.network.continue_request(request=request) + + +@pytest.mark.parametrize("value", [False, 42, {}, []]) +async def test_params_method_invalid_type( + bidi_session, value, setup_network_test, url, fetch, wait_for_event, + add_intercept): + await setup_network_test(events=["network.beforeRequestSent"]) + + text_url = url(PAGE_EMPTY_TEXT) + await add_intercept( + phases=["beforeRequestSent"], + url_patterns=[{ + "type": "string", + "pattern": text_url, + }], + ) + + asyncio.ensure_future(fetch(text_url)) + event = await wait_for_event("network.beforeRequestSent") + request = event["request"]["request"] + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.continue_request(request=request, + method=value) + + +# TODO: https://github.com/w3c/webdriver-bidi/issues/575 +@pytest.mark.parametrize("value", ["", "GETT"]) +async def test_params_method_invalid_value( + bidi_session, value, setup_network_test, url, fetch, wait_for_event, + add_intercept): + await setup_network_test(events=["network.beforeRequestSent"]) + + text_url = url(PAGE_EMPTY_TEXT) + await add_intercept( + phases=["beforeRequestSent"], + url_patterns=[{ + "type": "string", + "pattern": text_url, + }], + ) + + asyncio.ensure_future(fetch(text_url)) + event = await wait_for_event("network.beforeRequestSent") + request = event["request"]["request"] + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.continue_request(request=request, + method=value)