[docs]classDisplayFixture:"""A fixture for running web-based tests using ``playwright``"""_exit_stack:AsyncExitStackdef__init__(self,backend:BackendFixture|None=None,driver:Browser|BrowserContext|Page|None=None,url_prefix:str="",)->None:ifbackendisnotNone:self.backend=backendifdriverisnotNone:ifisinstance(driver,Page):self.page=driverelse:self._browser=driverself.url_prefix=url_prefixasyncdefshow(self,component:RootComponentConstructor,)->None:self.backend.mount(component)awaitself.goto("/")awaitself.root_element()# check that root element is attachedasyncdefgoto(self,path:str,query:Any|None=None,add_url_prefix:bool=True)->None:awaitself.page.goto(self.backend.url(f"{self.url_prefix}{path}"ifadd_url_prefixelsepath,query))asyncdefroot_element(self)->ElementHandle:element=awaitself.page.wait_for_selector("#app",state="attached")ifelementisNone:# nocovmsg="Root element not attached"raiseRuntimeError(msg)returnelementasyncdef__aenter__(self)->DisplayFixture:es=self._exit_stack=AsyncExitStack()browser:Browser|BrowserContextifnothasattr(self,"page"):ifnothasattr(self,"_browser"):pw=awaites.enter_async_context(async_playwright())browser=awaitpw.chromium.launch()else:browser=self._browserself.page=awaitbrowser.new_page()self.page.set_default_timeout(REACTPY_TESTING_DEFAULT_TIMEOUT.current*1000)ifnothasattr(self,"backend"):self.backend=BackendFixture()awaites.enter_async_context(self.backend)returnselfasyncdef__aexit__(self,exc_type:type[BaseException]|None,exc_value:BaseException|None,traceback:TracebackType|None,)->None:self.backend.mount(None)awaitself._exit_stack.aclose()