diff --git a/tools/webdriver/webdriver/bidi/error.py b/tools/webdriver/webdriver/bidi/error.py index d3e318d1705f07..7b688dd1a6cfa9 100644 --- a/tools/webdriver/webdriver/bidi/error.py +++ b/tools/webdriver/webdriver/bidi/error.py @@ -67,6 +67,10 @@ class NoSuchNodeException(BidiException): error_code = "no such node" +class NoSuchRequestException(BidiException): + error_code = "no such request" + + class NoSuchScriptException(BidiException): error_code = "no such script" diff --git a/tools/webdriver/webdriver/bidi/modules/network.py b/tools/webdriver/webdriver/bidi/modules/network.py index 940aa7cffdd2ef..622f083dc82e93 100644 --- a/tools/webdriver/webdriver/bidi/modules/network.py +++ b/tools/webdriver/webdriver/bidi/modules/network.py @@ -61,3 +61,8 @@ def _add_intercept(self, result: Mapping[str, Any]) -> Any: def remove_intercept(self, intercept: str) -> Mapping[str, Any]: params: MutableMapping[str, Any] = {"intercept": intercept} return params + + @command + def fail_request(self, request: str) -> Mapping[str, Any]: + params: MutableMapping[str, Any] = {"request": request} + return params diff --git a/webdriver/tests/bidi/network/fail_request/__init__.py b/webdriver/tests/bidi/network/fail_request/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/webdriver/tests/bidi/network/fail_request/invalid.py b/webdriver/tests/bidi/network/fail_request/invalid.py new file mode 100644 index 00000000000000..69148b69810d76 --- /dev/null +++ b/webdriver/tests/bidi/network/fail_request/invalid.py @@ -0,0 +1,35 @@ +import pytest +import webdriver.bidi.error as error + +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.fail_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.fail_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.fail_request(request=request)