Skip to content

Commit 5b3cb55

Browse files
authored
test: assert all tracing actions instead of a subset (#1408)
1 parent 5f9d5dd commit 5b3cb55

File tree

2 files changed

+80
-52
lines changed

2 files changed

+80
-52
lines changed

tests/async/test_tracing.py

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -89,19 +89,29 @@ async def test_should_collect_trace_with_resources_but_no_js(
8989
await page.mouse.dblclick(30, 30)
9090
await page.keyboard.insert_text("abc")
9191
await page.wait_for_timeout(2000) # Give it some time to produce screenshots.
92+
await page.route("**/empty.html", lambda route: route.continue_())
93+
await page.goto(server.EMPTY_PAGE)
9294
await page.close()
9395
trace_file_path = tmpdir / "trace.zip"
9496
await context.tracing.stop(path=trace_file_path)
9597

9698
(_, events) = parse_trace(trace_file_path)
9799
assert events[0]["type"] == "context-options"
98-
assert events_have_entry(events, "Page.goto") is True
99-
assert events_have_entry(events, "Page.set_content") is True
100-
assert events_have_entry(events, "Page.click") is True
101-
assert events_have_entry(events, "Mouse.move") is True
102-
assert events_have_entry(events, "Mouse.dblclick") is True
103-
assert events_have_entry(events, "Keyboard.insert_text") is True
104-
assert events_have_entry(events, "Page.close") is True
100+
assert get_actions(events) == [
101+
"Page.goto",
102+
"Page.set_content",
103+
"Page.click",
104+
"Mouse.move",
105+
"Mouse.dblclick",
106+
"Keyboard.insert_text",
107+
"Page.wait_for_timeout",
108+
"Page.route",
109+
"Page.goto",
110+
# FIXME: https://github.com/microsoft/playwright-python/issues/1397
111+
"Channel.send",
112+
"Page.close",
113+
"Tracing.stop",
114+
]
105115

106116
assert len(list(filter(lambda e: e["type"] == "frame-snapshot", events))) >= 1
107117
assert len(list(filter(lambda e: e["type"] == "screencast-frame", events))) >= 1
@@ -143,19 +153,16 @@ async def test_should_collect_two_traces(
143153

144154
(_, events) = parse_trace(tracing1_path)
145155
assert events[0]["type"] == "context-options"
146-
assert events_have_entry(events, "Page.goto") is True
147-
assert events_have_entry(events, "Page.set_content") is True
148-
assert events_have_entry(events, "Page.click") is True
149-
assert events_have_entry(events, "Page.dblclick") is False
150-
assert events_have_entry(events, "Page.close") is False
156+
assert get_actions(events) == [
157+
"Page.goto",
158+
"Page.set_content",
159+
"Page.click",
160+
"Tracing.stop",
161+
]
151162

152163
(_, events) = parse_trace(tracing2_path)
153164
assert events[0]["type"] == "context-options"
154-
assert events_have_entry(events, "Page.goto") is False
155-
assert events_have_entry(events, "Page.set_content") is False
156-
assert events_have_entry(events, "Page.click") is False
157-
assert events_have_entry(events, "Page.dblclick") is True
158-
assert events_have_entry(events, "Page.close") is True
165+
assert get_actions(events) == ["Page.dblclick", "Page.close", "Tracing.stop"]
159166

160167

161168
async def test_should_not_throw_when_stopping_without_start_but_not_exporting(
@@ -182,13 +189,16 @@ async def test_should_work_with_playwright_context_managers(
182189

183190
(_, events) = parse_trace(trace_file_path)
184191
assert events[0]["type"] == "context-options"
185-
assert events_have_entry(events, "Page.goto")
186-
assert events_have_entry(events, "Page.set_content")
187-
assert events_have_entry(events, "Page.expect_console_message")
188-
assert events_have_entry(events, "Page.evaluate")
189-
assert events_have_entry(events, "Page.click")
190-
assert events_have_entry(events, "Page.expect_popup")
191-
assert events_have_entry(events, "Page.evaluate")
192+
assert get_actions(events) == [
193+
"Page.goto",
194+
"Page.set_content",
195+
"Page.expect_console_message",
196+
"Page.evaluate",
197+
"Page.click",
198+
"Page.expect_popup",
199+
"Page.evaluate",
200+
"Tracing.stop",
201+
]
192202

193203

194204
def parse_trace(path: Path) -> Tuple[Dict[str, bytes], List[Any]]:
@@ -203,5 +213,9 @@ def parse_trace(path: Path) -> Tuple[Dict[str, bytes], List[Any]]:
203213
return (resources, events)
204214

205215

206-
def events_have_entry(events: List[Any], api_name: str) -> bool:
207-
return any(e.get("metadata", {}).get("apiName") == api_name for e in events)
216+
def get_actions(events: List[Any]) -> List[str]:
217+
action_events = sorted(
218+
list(filter(lambda e: e["type"] == "action", events)),
219+
key=lambda e: e["metadata"]["startTime"],
220+
)
221+
return [e["metadata"]["apiName"] for e in action_events]

tests/sync/test_tracing.py

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -89,19 +89,29 @@ def test_should_collect_trace_with_resources_but_no_js(
8989
page.mouse.dblclick(30, 30)
9090
page.keyboard.insert_text("abc")
9191
page.wait_for_timeout(2000) # Give it some time to produce screenshots.
92+
page.route("**/empty.html", lambda route: route.continue_())
93+
page.goto(server.EMPTY_PAGE)
9294
page.close()
9395
trace_file_path = tmpdir / "trace.zip"
9496
context.tracing.stop(path=trace_file_path)
9597

9698
(_, events) = parse_trace(trace_file_path)
9799
assert events[0]["type"] == "context-options"
98-
assert events_have_entry(events, "Page.goto") is True
99-
assert events_have_entry(events, "Page.set_content") is True
100-
assert events_have_entry(events, "Page.click") is True
101-
assert events_have_entry(events, "Mouse.move") is True
102-
assert events_have_entry(events, "Mouse.dblclick") is True
103-
assert events_have_entry(events, "Keyboard.insert_text") is True
104-
assert events_have_entry(events, "Page.close") is True
100+
assert get_actions(events) == [
101+
"Page.goto",
102+
"Page.set_content",
103+
"Page.click",
104+
"Mouse.move",
105+
"Mouse.dblclick",
106+
"Keyboard.insert_text",
107+
"Page.wait_for_timeout",
108+
"Page.route",
109+
"Page.goto",
110+
# FIXME: https://github.com/microsoft/playwright-python/issues/1397
111+
"Channel.send",
112+
"Page.close",
113+
"Tracing.stop",
114+
]
105115

106116
assert len(list(filter(lambda e: e["type"] == "frame-snapshot", events))) >= 1
107117
assert len(list(filter(lambda e: e["type"] == "screencast-frame", events))) >= 1
@@ -143,19 +153,16 @@ def test_should_collect_two_traces(
143153

144154
(_, events) = parse_trace(tracing1_path)
145155
assert events[0]["type"] == "context-options"
146-
assert events_have_entry(events, "Page.goto") is True
147-
assert events_have_entry(events, "Page.set_content") is True
148-
assert events_have_entry(events, "Page.click") is True
149-
assert events_have_entry(events, "Page.dblclick") is False
150-
assert events_have_entry(events, "Page.close") is False
156+
assert get_actions(events) == [
157+
"Page.goto",
158+
"Page.set_content",
159+
"Page.click",
160+
"Tracing.stop",
161+
]
151162

152163
(_, events) = parse_trace(tracing2_path)
153164
assert events[0]["type"] == "context-options"
154-
assert events_have_entry(events, "Page.goto") is False
155-
assert events_have_entry(events, "Page.set_content") is False
156-
assert events_have_entry(events, "Page.click") is False
157-
assert events_have_entry(events, "Page.dblclick") is True
158-
assert events_have_entry(events, "Page.close") is True
165+
assert get_actions(events) == ["Page.dblclick", "Page.close", "Tracing.stop"]
159166

160167

161168
def test_should_not_throw_when_stopping_without_start_but_not_exporting(
@@ -182,13 +189,16 @@ def test_should_work_with_playwright_context_managers(
182189

183190
(_, events) = parse_trace(trace_file_path)
184191
assert events[0]["type"] == "context-options"
185-
assert events_have_entry(events, "Page.goto")
186-
assert events_have_entry(events, "Page.set_content")
187-
assert events_have_entry(events, "Page.expect_console_message")
188-
assert events_have_entry(events, "Page.evaluate")
189-
assert events_have_entry(events, "Page.click")
190-
assert events_have_entry(events, "Page.expect_popup")
191-
assert events_have_entry(events, "Page.evaluate")
192+
assert get_actions(events) == [
193+
"Page.goto",
194+
"Page.set_content",
195+
"Page.expect_console_message",
196+
"Page.evaluate",
197+
"Page.click",
198+
"Page.expect_popup",
199+
"Page.evaluate",
200+
"Tracing.stop",
201+
]
192202

193203

194204
def parse_trace(path: Path) -> Tuple[Dict[str, bytes], List[Any]]:
@@ -203,5 +213,9 @@ def parse_trace(path: Path) -> Tuple[Dict[str, bytes], List[Any]]:
203213
return (resources, events)
204214

205215

206-
def events_have_entry(events: List[Any], api_name: str) -> bool:
207-
return any(e.get("metadata", {}).get("apiName") == api_name for e in events)
216+
def get_actions(events: List[Any]) -> List[str]:
217+
action_events = sorted(
218+
list(filter(lambda e: e["type"] == "action", events)),
219+
key=lambda e: e["metadata"]["startTime"],
220+
)
221+
return [e["metadata"]["apiName"] for e in action_events]

0 commit comments

Comments
 (0)