From 837f7c3f595065578d65411c37d89b4197a711f6 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 11 Feb 2026 12:52:14 +0100 Subject: [PATCH 1/2] fix: context.request timeout --- playwright/_impl/_browser_context.py | 1 + tests/sync/test_page_request_timeout.py | 36 +++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 tests/sync/test_page_request_timeout.py diff --git a/playwright/_impl/_browser_context.py b/playwright/_impl/_browser_context.py index f56564a27..e27a9437a 100644 --- a/playwright/_impl/_browser_context.py +++ b/playwright/_impl/_browser_context.py @@ -124,6 +124,7 @@ def __init__( self._tracing = cast(Tracing, from_channel(initializer["tracing"])) self._har_recorders: Dict[str, HarRecordingMetadata] = {} self._request: APIRequestContext = from_channel(initializer["requestContext"]) + self._request._timeout_settings = self._timeout_settings self._clock = Clock(self) self._channel.on( "bindingCall", diff --git a/tests/sync/test_page_request_timeout.py b/tests/sync/test_page_request_timeout.py new file mode 100644 index 000000000..3903e121f --- /dev/null +++ b/tests/sync/test_page_request_timeout.py @@ -0,0 +1,36 @@ +# Copyright (c) Microsoft Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import pytest + +from playwright.sync_api import BrowserContext, Error, Page +from tests.server import Server + + +def test_context_request_should_support_timeout_option( + page: Page, context: BrowserContext, server: Server +) -> None: + # https://github.com/microsoft/playwright/issues/39220 + + server.set_route("/empty.html", lambda req: None) + with pytest.raises(Error, match="Timeout 123ms exceeded"): + page.request.get(server.EMPTY_PAGE, timeout=123) + with pytest.raises(Error, match="Timeout 123ms exceeded"): + context.request.get(server.EMPTY_PAGE, timeout=123) + + context.set_default_timeout(123) + with pytest.raises(Error, match="Timeout 123ms exceeded"): + page.request.get(server.EMPTY_PAGE) + with pytest.raises(Error, match="Timeout 123ms exceeded"): + context.request.get(server.EMPTY_PAGE) From 98e1cffeefe482d361b40a9939af7fe0e6d0f8b3 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 11 Feb 2026 12:53:33 +0100 Subject: [PATCH 2/2] simpler --- tests/sync/test_page_request_timeout.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/sync/test_page_request_timeout.py b/tests/sync/test_page_request_timeout.py index 3903e121f..8b65da26d 100644 --- a/tests/sync/test_page_request_timeout.py +++ b/tests/sync/test_page_request_timeout.py @@ -23,14 +23,14 @@ def test_context_request_should_support_timeout_option( ) -> None: # https://github.com/microsoft/playwright/issues/39220 - server.set_route("/empty.html", lambda req: None) + server.set_route("/", lambda req: None) with pytest.raises(Error, match="Timeout 123ms exceeded"): - page.request.get(server.EMPTY_PAGE, timeout=123) + page.request.get(server.PREFIX, timeout=123) with pytest.raises(Error, match="Timeout 123ms exceeded"): - context.request.get(server.EMPTY_PAGE, timeout=123) + context.request.get(server.PREFIX, timeout=123) context.set_default_timeout(123) with pytest.raises(Error, match="Timeout 123ms exceeded"): - page.request.get(server.EMPTY_PAGE) + page.request.get(server.PREFIX) with pytest.raises(Error, match="Timeout 123ms exceeded"): - context.request.get(server.EMPTY_PAGE) + context.request.get(server.PREFIX)