@@ -35,71 +35,81 @@ def on_frame(frame: ScreencastFrame) -> None:
3535 event .set ()
3636
3737 await page .screencast .start (on_frame = on_frame )
38- await page .goto (server .EMPTY_PAGE )
39- await page .evaluate ("() => document.body.style.backgroundColor = 'red'" )
40- # Force a couple of paint cycles so engines that only emit on visual change
41- # still produce a frame. Mirrors upstream `ensureSomeFrames`.
42- for _ in range (3 ):
43- await page .evaluate (
44- "() => new Promise(f => requestAnimationFrame(() => requestAnimationFrame(f)))"
45- )
46- await page .screenshot ()
47- await asyncio .wait_for (event .wait (), timeout = 10 )
48- await page .screencast .stop ()
38+ try :
39+ await page .goto (server .EMPTY_PAGE )
40+ await page .evaluate ("() => document.body.style.backgroundColor = 'red'" )
41+ # Force a couple of paint cycles so engines that only emit on visual change
42+ # still produce a frame. Mirrors upstream `ensureSomeFrames`.
43+ for _ in range (3 ):
44+ await page .evaluate (
45+ "() => new Promise(f => requestAnimationFrame(() => requestAnimationFrame(f)))"
46+ )
47+ await page .screenshot ()
48+ await asyncio .wait_for (event .wait (), timeout = 10 )
49+ finally :
50+ await page .screencast .stop ()
4951 assert len (received ) >= 1
5052 assert all (isinstance (d , bytes ) and len (d ) > 0 for d in received )
5153
5254
5355async def test_starting_twice_should_throw (page : Page ) -> None :
5456 await page .screencast .start (on_frame = lambda f : None )
55- with pytest .raises (Exception , match = "already started" ):
56- await page .screencast .start (on_frame = lambda f : None )
57- await page .screencast .stop ()
57+ try :
58+ with pytest .raises (Exception , match = "already started" ):
59+ await page .screencast .start (on_frame = lambda f : None )
60+ finally :
61+ await page .screencast .stop ()
5862
5963
6064async def test_show_overlays_and_overlay_apis_should_not_throw (page : Page ) -> None :
6165 await page .screencast .start (on_frame = lambda f : None )
62- await page .screencast .show_overlay ("<div>hello</div>" , duration = 100 )
63- await page .screencast .show_chapter ("ch" , description = "desc" , duration = 100 )
64- await page .screencast .hide_overlays ()
65- await page .screencast .show_overlays ()
66- await page .screencast .show_actions (duration = 100 , position = "top-right" )
67- await page .screencast .hide_actions ()
68- await page .screencast .stop ()
66+ try :
67+ await page .screencast .show_overlay ("<div>hello</div>" , duration = 100 )
68+ await page .screencast .show_chapter ("ch" , description = "desc" , duration = 100 )
69+ await page .screencast .hide_overlays ()
70+ await page .screencast .show_overlays ()
71+ await page .screencast .show_actions (duration = 100 , position = "top-right" )
72+ await page .screencast .hide_actions ()
73+ finally :
74+ await page .screencast .stop ()
6975
7076
7177async def test_on_frame_receives_viewport_size (
7278 browser : Browser , server : Server
7379) -> None :
7480 context = await browser .new_context (viewport = {"width" : 1000 , "height" : 400 })
75- page = await context .new_page ()
76- received : list = []
77-
78- def on_frame (frame : ScreencastFrame ) -> None :
79- received .append (frame )
80-
81- size : ScreencastSize = {"width" : 500 , "height" : 400 }
82- await page .screencast .start (on_frame = on_frame , size = size )
83- await page .goto (server .EMPTY_PAGE )
84- await page .evaluate ("() => document.body.style.backgroundColor = 'red'" )
85- for _ in range (100 ):
86- await page .evaluate (
87- "() => new Promise(f => requestAnimationFrame(() => requestAnimationFrame(f)))"
88- )
89- await page .screenshot ()
90- await page .screencast .stop ()
91- assert len (received ) >= 1
92- assert any (frame ["viewportWidth" ] == 1000 for frame in received )
93- for frame in received :
94- assert frame ["viewportHeight" ] == 400
95- assert isinstance (frame ["timestamp" ], (int , float ))
96- await context .close ()
81+ async with context :
82+ page = await context .new_page ()
83+ received : list = []
84+
85+ def on_frame (frame : ScreencastFrame ) -> None :
86+ received .append (frame )
87+
88+ size : ScreencastSize = {"width" : 500 , "height" : 400 }
89+ await page .screencast .start (on_frame = on_frame , size = size )
90+ try :
91+ await page .goto (server .EMPTY_PAGE )
92+ await page .evaluate ("() => document.body.style.backgroundColor = 'red'" )
93+ for _ in range (100 ):
94+ await page .evaluate (
95+ "() => new Promise(f => requestAnimationFrame(() => requestAnimationFrame(f)))"
96+ )
97+ await page .screenshot ()
98+ finally :
99+ await page .screencast .stop ()
100+ assert len (received ) >= 1
101+ assert any (frame ["viewportWidth" ] == 1000 for frame in received )
102+ for frame in received :
103+ assert frame ["viewportHeight" ] == 400
104+ assert isinstance (frame ["timestamp" ], (int , float ))
97105
98106
99107async def test_show_actions_should_accept_cursor_param (page : Page ) -> None :
100108 await page .screencast .start (on_frame = lambda f : None )
101- async with await page .screencast .show_actions (duration = 100 , cursor = "pointer" ):
102- pass
103- async with await page .screencast .show_actions (duration = 100 , cursor = "none" ):
104- pass
105- await page .screencast .stop ()
109+ try :
110+ async with await page .screencast .show_actions (duration = 100 , cursor = "pointer" ):
111+ pass
112+ async with await page .screencast .show_actions (duration = 100 , cursor = "none" ):
113+ pass
114+ finally :
115+ await page .screencast .stop ()
0 commit comments