async def test_should_give_access_to_the_intercepted_response(
        page: Page, server: Server):
    await page.goto(server.EMPTY_PAGE)

    route_task = asyncio.Future()
    await page.route("**/title.html",
                     lambda route: route_task.set_result(route))

    eval_task = asyncio.create_task(
        page.evaluate("url => fetch(url)", server.PREFIX + "/title.html"))

    route = await route_task
    response = await page.request.fetch(route.request)

    assert response.status == 200
    assert response.status_text == "OK"
    assert response.ok is True
    assert response.url.endswith("/title.html") is True
    assert response.headers["content-type"] == "text/html; charset=utf-8"
    assert list(
        filter(
            lambda header: header["name"].lower() == "content-type",
            response.headers_array,
        )) == [{
            "name": "Content-Type",
            "value": "text/html; charset=utf-8"
        }]

    await asyncio.gather(
        route.fulfill(response=response),
        eval_task,
    )
Exemplo n.º 2
0
async def test_should_amend_binary_post_data(page: Page,
                                             context: BrowserContext,
                                             server: Server):
    await page.goto(server.EMPTY_PAGE)
    post_data_buffer = []
    await context.route(
        "**/*",
        lambda route: (
            post_data_buffer.append(route.request.post_data),
            asyncio.create_task(route.continue_()),
        ),
    )
    await context.route(
        "**/*",
        lambda route: asyncio.create_task(
            route.fallback(post_data=b"\x00\x01\x02\x03\x04")),
    )

    [server_request, result] = await asyncio.gather(
        server.wait_for_request("/sleep.zzz"),
        page.evaluate(
            "fetch('/sleep.zzz', { method: 'POST', body: 'birdy' })"),
    )
    # FIXME: should this be bytes?
    assert post_data_buffer == ["\x00\x01\x02\x03\x04"]
    assert server_request.method == b"POST"
    assert server_request.post_body == b"\x00\x01\x02\x03\x04"
Exemplo n.º 3
0
async def test_page_events_request_should_report_requests_and_responses_handled_by_service_worker(
        page: Page, server):
    await page.goto(server.PREFIX + "/serviceworkers/fetchdummy/sw.html")
    await page.evaluate("() => window.activationPromise")
    [request, sw_response
     ] = await asyncio.gather(page.waitForEvent("request"),
                              page.evaluate('() => fetchDummy("foo")'))
    assert sw_response == "responseFromServiceWorker:foo"
    assert request.url == server.PREFIX + "/serviceworkers/fetchdummy/foo"
    response = await request.response()
    assert response.url == server.PREFIX + "/serviceworkers/fetchdummy/foo"
    assert await response.text() == "responseFromServiceWorker:foo"
Exemplo n.º 4
0
async def test_should_delete_header_with_undefined_value(
        page: Page, context: BrowserContext, server: Server) -> None:
    await page.goto(server.EMPTY_PAGE)
    server.set_route(
        "/something",
        lambda r: (
            r.setHeader("Acces-Control-Allow-Origin", "*"),
            r.write(b"done"),
            r.finish(),
        ),
    )

    intercepted_request = []

    async def capture_and_continue(route: Route, request: Request):
        intercepted_request.append(request)
        await route.continue_()

    await context.route("**/*", capture_and_continue)

    async def delete_foo_header(route: Route, request: Request):
        headers = await request.all_headers()
        await route.fallback(headers={**headers, "foo": None})

    await context.route(server.PREFIX + "/something", delete_foo_header)

    [server_req, text] = await asyncio.gather(
        server.wait_for_request("/something"),
        page.evaluate(
            """
            async url => {
                const data = await fetch(url, {
                    headers: {
                    foo: 'a',
                    bar: 'b',
                    }
                });
                return data.text();
                }
            """,
            server.PREFIX + "/something",
        ),
    )

    assert text == "done"
    assert not intercepted_request[0].headers.get("foo")
    assert intercepted_request[0].headers.get("bar") == "b"
    assert not server_req.getHeader("foo")
    assert server_req.getHeader("bar") == "b"
Exemplo n.º 5
0
async def test_console_should_work(page: Page, server):
    messages: List[ConsoleMessage] = []
    page.once("console", lambda m: messages.append(m))
    await asyncio.gather(
        page.evaluate('() => console.log("hello", 5, {foo: "bar"})'),
        page.wait_for_event("console"),
    )
    assert len(messages) == 1
    message = messages[0]
    assert message.text == "hello 5 JSHandle@object"
    assert str(message) == "hello 5 JSHandle@object"
    assert message.type == "log"
    assert await message.args[0].json_value() == "hello"
    assert await message.args[1].json_value() == 5
    assert await message.args[2].json_value() == {"foo": "bar"}
async def test_should_give_access_to_the_intercepted_response_body(
        page: Page, server: Server):
    await page.goto(server.EMPTY_PAGE)

    route_task = asyncio.Future()
    await page.route("**/simple.json",
                     lambda route: route_task.set_result(route))

    eval_task = asyncio.create_task(
        page.evaluate("url => fetch(url)", server.PREFIX + "/simple.json"))

    route = await route_task
    response = await page.request.fetch(route.request)

    assert await response.text() == '{"foo": "bar"}\n'

    await asyncio.gather(
        route.fulfill(response=response),
        eval_task,
    )
async def test_should_amend_post_data(page: Page, server: Server) -> None:
    await page.goto(server.EMPTY_PAGE)
    post_data = []
    await page.route(
        "**/*",
        lambda route: (
            post_data.append(route.request.post_data),
            asyncio.create_task(route.continue_()),
        ),
    )
    await page.route(
        "**/*",
        lambda route: asyncio.create_task(route.fallback(post_data="doggo")))
    [server_request, _] = await asyncio.gather(
        server.wait_for_request("/sleep.zzz"),
        page.evaluate(
            "() => fetch('/sleep.zzz', { method: 'POST', body: 'birdy' })"),
    )
    assert post_data == ["doggo"]
    assert server_request.post_body == b"doggo"
async def test_should_amend_method(page: Page, server: Server) -> None:
    await page.goto(server.EMPTY_PAGE)

    method = []
    await page.route(
        "**/*",
        lambda route: (
            method.append(route.request.method),
            asyncio.create_task(route.continue_()),
        ),
    )
    await page.route(
        "**/*",
        lambda route: asyncio.create_task(route.fallback(method="POST")))

    [request, _] = await asyncio.gather(
        server.wait_for_request("/sleep.zzz"),
        page.evaluate("() => fetch('/sleep.zzz')"),
    )

    assert method == ["POST"]
    assert request.method == b"POST"