Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
102 lines (84 loc) · 4.14 KB

File metadata and controls

102 lines (84 loc) · 4.14 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# 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.async_api import Browser, Page, ResourceTiming
from tests.server import Server
async def test_should_work(page: Page, server: Server) -> None:
async with page.expect_event("requestfinished") as request_info:
await page.goto(server.EMPTY_PAGE)
request = await request_info.value
timing = request.timing
verify_connections_timing_consistency(timing)
assert timing["requestStart"] >= timing["connectEnd"]
assert timing["responseStart"] >= timing["requestStart"]
assert timing["responseEnd"] >= timing["responseStart"]
assert timing["responseEnd"] < 10000
async def test_should_work_for_subresource(
page: Page, server: Server, is_win: bool, is_mac: bool, is_webkit: bool
) -> None:
if is_webkit and (is_mac or is_win):
pytest.skip()
requests = []
page.on("requestfinished", lambda request: requests.append(request))
await page.goto(server.PREFIX + "/one-style.html")
assert len(requests) >= 2
timing = requests[1].timing
verify_connections_timing_consistency(timing)
assert timing["requestStart"] >= 0
assert timing["responseStart"] > timing["requestStart"]
assert timing["responseEnd"] >= timing["responseStart"]
assert timing["responseEnd"] < 10000
async def test_should_work_for_ssl(browser: Browser, https_server: Server) -> None:
page = await browser.new_page(ignore_https_errors=True)
async with page.expect_event("requestfinished") as request_info:
await page.goto(https_server.EMPTY_PAGE)
request = await request_info.value
timing = request.timing
verify_connections_timing_consistency(timing)
assert timing["requestStart"] >= timing["connectEnd"]
assert timing["responseStart"] >= timing["requestStart"]
assert timing["responseEnd"] >= timing["responseStart"]
assert timing["responseEnd"] < 10000
await page.close()
@pytest.mark.skip_browser("webkit") # In WebKit, redirects don"t carry the timing info
async def test_should_work_for_redirect(page: Page, server: Server) -> None:
server.set_redirect("/foo.html", "/empty.html")
responses = []
page.on("response", lambda response: responses.append(response))
await page.goto(server.PREFIX + "/foo.html")
for r in responses:
await r.finished()
assert len(responses) == 2
assert responses[0].url == server.PREFIX + "/foo.html"
assert responses[1].url == server.PREFIX + "/empty.html"
timing1 = responses[0].request.timing
verify_connections_timing_consistency(timing1)
assert timing1["requestStart"] >= timing1["connectEnd"]
assert timing1["responseStart"] > timing1["requestStart"]
assert timing1["responseEnd"] >= timing1["responseStart"]
assert timing1["responseEnd"] < 10000
timing2 = responses[1].request.timing
verify_connections_timing_consistency(timing2)
assert timing2["requestStart"] >= 0
assert timing2["responseStart"] > timing2["requestStart"]
assert timing2["responseEnd"] >= timing2["responseStart"]
assert timing2["responseEnd"] < 10000
def verify_timing_value(value: float, previous: float) -> None:
assert value == -1 or value > 0 and value >= previous
def verify_connections_timing_consistency(timing: ResourceTiming) -> None:
verify_timing_value(timing["domainLookupStart"], -1)
verify_timing_value(timing["domainLookupEnd"], timing["domainLookupStart"])
verify_timing_value(timing["connectStart"], timing["domainLookupEnd"])
verify_timing_value(timing["secureConnectionStart"], timing["connectStart"])
verify_timing_value(timing["connectEnd"], timing["secureConnectionStart"])
Morty Proxy This is a proxified and sanitized view of the page, visit original site.