1414
1515import asyncio
1616from pathlib import Path
17- from typing import Any , Awaitable , Callable , Dict , Generator , Optional
17+ from typing import Any , AsyncGenerator , Awaitable , Callable , Dict , List , Optional
1818
1919import pytest
2020
2424
2525
2626@pytest .fixture ()
27- def launch_persistent_context (
27+ async def launch_persistent_context (
2828 browser_type : BrowserType ,
2929 browser_channel : Optional [str ],
3030 tmp_path : Path ,
3131 launch_arguments : Dict [str , Any ],
3232 is_headless_shell : bool ,
33- ) -> Generator [Callable [[ str ] , Awaitable [BrowserContext ]], None , None ]:
33+ ) -> AsyncGenerator [Callable [... , Awaitable [BrowserContext ]], None ]:
3434 if browser_channel and browser_channel .startswith ("chrome" ):
3535 pytest .skip (
3636 "--load-extension is not supported in Chrome anymore. https://groups.google.com/a/chromium.org/g/chromium-extensions/c/1-g8EFx2BBY/m/S0ET5wPjCAAJ"
3737 )
3838 if is_headless_shell :
3939 pytest .skip ("Headless Shell has no support for extensions" )
4040
41+ contexts : List [BrowserContext ] = []
42+
4143 async def launch (extension_path : str , ** kwargs : Any ) -> BrowserContext :
4244 context = await browser_type .launch_persistent_context (
4345 str (tmp_path ),
@@ -48,23 +50,27 @@ async def launch(extension_path: str, **kwargs: Any) -> BrowserContext:
4850 f"--load-extension={ extension_path } " ,
4951 ],
5052 )
53+ contexts .append (context )
5154 return context
5255
5356 yield launch
5457
58+ for context in contexts :
59+ await context .close ()
60+
5561
5662@pytest .mark .only_browser ("chromium" )
5763async def test_should_give_access_to_the_service_worker (
58- launch_persistent_context : Any ,
64+ launch_persistent_context : Callable [..., Awaitable [ BrowserContext ]] ,
5965 assetdir : Path ,
6066) -> None :
6167 extension_path = str (assetdir / "extension-mv3-simple" )
62- context : BrowserContext = await launch_persistent_context (extension_path )
68+ context = await launch_persistent_context (extension_path )
6369 service_workers = context .service_workers
6470 service_worker = (
6571 service_workers [0 ]
6672 if len (service_workers )
67- else await context .wait_for_event ("backgroundpage " )
73+ else await context .wait_for_event ("serviceworker " )
6874 )
6975 assert service_worker
7076 assert service_worker in context .service_workers
@@ -76,19 +82,19 @@ async def test_should_give_access_to_the_service_worker(
7682
7783@pytest .mark .only_browser ("chromium" )
7884async def test_should_give_access_to_the_service_worker_when_recording_video (
79- launch_persistent_context : Any ,
85+ launch_persistent_context : Callable [..., Awaitable [ BrowserContext ]] ,
8086 tmp_path : Path ,
8187 assetdir : Path ,
8288) -> None :
8389 extension_path = str (assetdir / "extension-mv3-simple" )
84- context : BrowserContext = await launch_persistent_context (
90+ context = await launch_persistent_context (
8591 extension_path , record_video_dir = (tmp_path / "videos" )
8692 )
8793 service_workers = context .service_workers
8894 service_worker = (
8995 service_workers [0 ]
9096 if len (service_workers )
91- else await context .wait_for_event ("backgroundpage " )
97+ else await context .wait_for_event ("serviceworker " )
9298 )
9399 assert service_worker
94100 assert service_worker in context .service_workers
@@ -101,12 +107,12 @@ async def test_should_give_access_to_the_service_worker_when_recording_video(
101107# https://github.com/microsoft/playwright/issues/32762
102108@pytest .mark .only_browser ("chromium" )
103109async def test_should_report_console_messages_from_content_script (
104- launch_persistent_context : Any ,
110+ launch_persistent_context : Callable [..., Awaitable [ BrowserContext ]] ,
105111 assetdir : Path ,
106112 server : Server ,
107113) -> None :
108114 extension_path = str (assetdir / "extension-mv3-with-logging" )
109- context : BrowserContext = await launch_persistent_context (extension_path )
115+ context = await launch_persistent_context (extension_path )
110116 page = await context .new_page ()
111117 [message , _ ] = await asyncio .gather (
112118 page .context .wait_for_event (
0 commit comments