@@ -89,19 +89,29 @@ async def test_should_collect_trace_with_resources_but_no_js(
89
89
await page .mouse .dblclick (30 , 30 )
90
90
await page .keyboard .insert_text ("abc" )
91
91
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 )
92
94
await page .close ()
93
95
trace_file_path = tmpdir / "trace.zip"
94
96
await context .tracing .stop (path = trace_file_path )
95
97
96
98
(_ , events ) = parse_trace (trace_file_path )
97
99
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
+ ]
105
115
106
116
assert len (list (filter (lambda e : e ["type" ] == "frame-snapshot" , events ))) >= 1
107
117
assert len (list (filter (lambda e : e ["type" ] == "screencast-frame" , events ))) >= 1
@@ -143,19 +153,16 @@ async def test_should_collect_two_traces(
143
153
144
154
(_ , events ) = parse_trace (tracing1_path )
145
155
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
+ ]
151
162
152
163
(_ , events ) = parse_trace (tracing2_path )
153
164
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" ]
159
166
160
167
161
168
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(
182
189
183
190
(_ , events ) = parse_trace (trace_file_path )
184
191
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
+ ]
192
202
193
203
194
204
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]]:
203
213
return (resources , events )
204
214
205
215
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