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
示例#3
0
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
示例#8
0
    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)))
示例#9
0
    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"
示例#11
0
    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))