@@ -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
161168async 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
194204def 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