Skip to content

Commit 7c8b962

Browse files
committed
slight optimization
1 parent 98f566b commit 7c8b962

File tree

2 files changed

+28
-18
lines changed

2 files changed

+28
-18
lines changed

src/idom/testing.py

+17-16
Original file line numberDiff line numberDiff line change
@@ -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

tests/conftest.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ def pytest_addoption(parser: Parser) -> None:
2020

2121

2222
@pytest.fixture
23-
async def display(server, browser):
24-
async with DisplayFixture(server, browser) as display:
23+
async def display(server, page):
24+
async with DisplayFixture(server, page) as display:
2525
yield display
2626

2727

@@ -31,6 +31,15 @@ async def server(request):
3131
yield server
3232

3333

34+
@pytest.fixture(scope="session")
35+
async def page(browser):
36+
pg = await browser.new_page()
37+
try:
38+
yield pg
39+
finally:
40+
await pg.close()
41+
42+
3443
@pytest.fixture(scope="session")
3544
async def browser(pytestconfig: Config):
3645
async with async_playwright() as pw:

0 commit comments

Comments
 (0)