@@ -114,18 +114,19 @@ class DisplayFixture:
114114 """A fixture for running web-based tests using ``playwright``"""
115115
116116 _exit_stack : AsyncExitStack
117- _context : BrowserContext
118117
119118 def __init__ (
120119 self ,
121120 server : ServerFixture | None = None ,
122- browser : Browser | None = None ,
121+ driver : Browser | BrowserContext | Page | None = None ,
123122 ) -> None :
124123 if server is not None :
125124 self .server = server
126- if browser is not None :
127- self .browser = browser
128-
125+ if driver is not None :
126+ if isinstance (driver , Page ):
127+ self ._page = driver
128+ else :
129+ self ._browser = browser
129130 self ._next_view_id = 0
130131
131132 async def show (
@@ -137,22 +138,21 @@ async def show(
137138 view_id = f"display-{ self ._next_view_id } "
138139 self .server .mount (lambda : html .div ({"id" : view_id }, component ()))
139140
140- page = await self ._context .new_page ()
141-
142- await page .goto (self .server .url (query = query ))
143- await page .wait_for_selector (f"#{ view_id } " )
141+ await self ._page .goto (self .server .url (query = query ))
142+ await self ._page .wait_for_selector (f"#{ view_id } " )
144143
145- return page
144+ return self . _page
146145
147146 async def __aenter__ (self : _Self ) -> _Self :
148147 es = self ._exit_stack = AsyncExitStack ()
149148
150- if not hasattr (self , "browser" ):
151- pw = await es .enter_async_context (async_playwright ())
152- self .browser = await pw .chromium .launch ()
153-
154- self ._context = await self .browser .new_context ()
155- es .push_async_callback (self ._context .close )
149+ if not hasattr (self , "_page" ):
150+ if not hasattr (self , "_browser" ):
151+ pw = await es .enter_async_context (async_playwright ())
152+ browser = await pw .chromium .launch ()
153+ else :
154+ browser = self ._browser
155+ self ._page = await browser .new_page ()
156156
157157 if not hasattr (self , "server" ):
158158 self .server = ServerFixture (** self ._server_options )
@@ -166,6 +166,7 @@ async def __aexit__(
166166 exc_value : BaseException | None ,
167167 traceback : TracebackType | None ,
168168 ) -> None :
169+ self .server .mount (None )
169170 await self ._exit_stack .aclose ()
170171
171172
0 commit comments