async def test_page_events_request_should_fire_for_navigation_requests( page: Page, server ): requests = [] page.on("request", lambda r: requests.append(r)) await page.goto(server.EMPTY_PAGE) assert len(requests) == 1
async def test_should_dismiss_the_confirm_prompt(page: Page, server): result = [] async def on_dialog(dialog: Dialog): result.append(True) await dialog.dismiss() page.on("dialog", on_dialog) assert await page.evaluate("confirm('boolean?')") is False assert result
async def test_should_accept_the_confirm_prompt(page: Page, server): result = [] def on_dialog(dialog: Dialog): result.append(True) asyncio.create_task(dialog.accept()) page.on("dialog", on_dialog) assert await page.evaluate("confirm('boolean?')") is True assert result
async def test_should_dismiss_the_prompt(page: Page, server): result = [] async def on_dialog(dialog: Dialog): result.append(True) await dialog.dismiss() page.on("dialog", on_dialog) assert await page.evaluate("prompt('question?')") is None assert result
async def test_page_events_request_should_accept_method(page: Page, server): class Log: def __init__(self): self.requests = [] def handle(self, request): self.requests.append(request) log = Log() page.on("request", log.handle) await page.goto(server.EMPTY_PAGE) assert len(log.requests) == 1
async def test_should_allow_accepting_prompts(page: Page, server): result = [] async def on_dialog(dialog: Dialog): result.append(True) assert dialog.type == "prompt" assert dialog.default_value == "yes." assert dialog.message == "question?" await dialog.accept("answer!") page.on("dialog", on_dialog) assert await page.evaluate("prompt('question?', 'yes.')") == "answer!" assert result
async def test_should_fire(page: Page, server): result = [] async def on_dialog(dialog: Dialog): result.append(True) assert dialog.type == "alert" assert dialog.default_value == "" assert dialog.message == "yo" await dialog.accept() page.on("dialog", on_dialog) await page.evaluate("alert('yo')") assert result
def _capture_logs_from_browser_tabs(page: Page) -> None: """Capture browser tab logs.""" def _app_info(message: str) -> None: """Log message at info level.""" if page.plugin and page.plugin.workspace: workspace_logger = page.plugin.workspace.get_logger() if workspace_logger: workspace_logger.info(message) return logger.info(message) def _app_error(message: str) -> None: """Log message at error level.""" if page.plugin and page.plugin.workspace: workspace_logger = page.plugin.workspace.get_logger() if workspace_logger: workspace_logger.error(message) return logger.error(message) page.on( "targetcreated", lambda target: _app_info(str(target)), ) page.on("console", lambda target: _app_info(target.text)) page.on("error", lambda target: _app_error(target.text)) page.on("pageerror", lambda target: _app_error(str(target)))
def test_baidu_search_with_network(page: Page, env: dict, fixtures): """ 获取请求/ 响应 """ import re page.on( "request", lambda request: print(">>", request.method, request.url) if not re.findall('.*/.[js|css|png]', request.url) else None) page.on( "response", lambda response: print("<<", response.status, response.url) if not re.findall('.*/.[js|css|png]', response.url) else None) baiduSearchPage = BaiduSearchPage(page) baiduSearchPage.open()
async def test_page_route_should_be_abortable_with_custom_error_codes( page: Page, server, is_webkit, is_firefox): await page.route( "**/*", lambda route: route.abort("internetdisconnected"), ) failed_requests = [] page.on("requestfailed", lambda request: failed_requests.append(request)) with pytest.raises(Error): await page.goto(server.EMPTY_PAGE) assert len(failed_requests) == 1 failed_request = failed_requests[0] if is_webkit: assert failed_request.failure == "Request intercepted" elif is_firefox: assert failed_request.failure == "NS_ERROR_OFFLINE" else: assert failed_request.failure == "net::ERR_INTERNET_DISCONNECTED"
def test_baidu_search_setting(page: Page): """ 名称:百度搜索设置 步骤: 1、打开百度浏览器 2、点击设置链接 3、在下拉框中"选择搜索" 4、点击"保存设置" 5、对弹出警告框保存 检查点: * 检查是否弹出提示框 """ baiduSearchPage = BaiduSearchPage(page) baiduSearchPage.page.goto(baiduSearchPage.url) baiduSearchPage.page.click(baiduSearchPage.settings) baiduSearchPage.page.click(baiduSearchPage.search_setting) baiduSearchPage.page.click(baiduSearchPage.save_setting) def on_dialog(dialog: Dialog): assert dialog.type == "alert" assert dialog.message == "已经记录下您的使用偏好" dialog.accept() page.on("dialog", on_dialog)
def on_page(self, page: Page) -> None: page_entry = dataclasses.har.Page( started_date_time=datetime.now(timezone.utc), id=f"page_{self._last_page}", title="", page_timings=dataclasses.har.PageTimings(on_content_load=-1, on_load=-1), ) self._last_page += 1 self._page_entries[page] = page_entry self._log.pages.append(page_entry) page.on("request", lambda request: self.on_request(page, request)) page.on("requestfinished", lambda request: self.on_request_finished(page, request)) page.on("response", lambda response: self.on_response(page, response)) def on_dom_content_loaded(page: Page) -> None: async def on_dom_content_loaded_task(): result: Dict[str, Union[ str, int]] = await page.main_frame.evaluate( """Promise.resolve({title: document.title, domContentLoaded: performance.timing.domContentLoadedEventStart})""" ) title = str(result.get("title", "")) page_entry.title = title dom_content_loaded = int(result.get("domContentLoaded", 0)) page_entry.page_timings.on_content_load = dom_content_loaded self._on_dom_content_loaded_event.set() self._tasks.append( self._loop.create_task(on_dom_content_loaded_task())) async def wait_on_dom_content_loaded_task(): await self._on_dom_content_loaded_event.wait() self._tasks.append( self._loop.create_task(wait_on_dom_content_loaded_task())) def on_load(page: Page) -> None: async def on_load_task(): result: Dict[str, Union[ str, int]] = await page.main_frame.evaluate( """Promise.resolve({title: document.title, loaded: performance.timing.loadEventStart})""" ) title = str(result.get("title", "")) page_entry.title = title loaded = int(result.get("loaded", 0)) page_entry.page_timings.on_load = loaded self._on_load_event.set() self._tasks.append(self._loop.create_task(on_load_task())) async def wait_on_load_task(): await self._on_load_event.wait() self._tasks.append(self._loop.create_task(wait_on_load_task())) page.on("domcontentloaded", lambda: on_dom_content_loaded(page)) page.on("load", lambda: on_load(page))