1. Network Events
from playwright.sync_api import Page, expect, Request, Response
def on_request(request: Request):
print("Sent Request:", request)
def on_response(response: Response):
print("Got Response:", response)
def test_docs_link(page: Page):
page.on("request", on_request)
page.on("response", on_response)
page.goto("https://playwright.dev/python")
docs_link = page.get_by_role("link", name="Docs")
docs_link.click()
expect(page).to_have_url(
"https://playwright.dev/python/docs/intro"
)
注意,这里我们执行的时候输入pytest -s
是为了能看到print
的输出。
2. Requests处理
from playwright.sync_api import Page, Route
def on_route(route: Route):
print("Request aborted:", route.request)
route.abort()
def test_docs_link(page: Page):
page.route(
"https://playwright.dev/python/img/playwright-logo.svg",
on_route
)
page.goto("https://playwright.dev/python")
page.screenshot(path="playwright.png")
标题1中的request.
无法修改内容,所以我们想要修改request内容,可以使用route.
。
Run表题2中的code:
可以看到,playwright的logo没有被load。
下面再以一个abort后缀为png的图片为例:
from playwright.sync_api import Page, Route
def on_route(route: Route):
print("Request aborted:", route.request)
route.abort()
def test_docs_link(page: Page):
page.route(
"**/*.png",
on_route
)
page.goto("https://playwright.dev/python")
page.screenshot(path="playwright.png", full_page=True)
可以看到,页面上的png图片都没有被load。
如果所有的图片都不想要load,code修改如下:
from playwright.sync_api import Page, Route
def on_route(route: Route):
if route.request.resource_type == "image":
route.abort()
else:
route.continue_()
def test_docs_link(page: Page):
page.route(
"**",
on_route
)
page.goto("https://playwright.dev/python")
page.screenshot(path="playwright.png", full_page=True)
执行后:
3. 修改Response
from playwright.sync_api import Page, Route
def on_route(route: Route):
route.fulfill(
status=200,
body="<html><body><h1>Custom response!</h1></body></html>",
)
def test_docs_link(page: Page):
page.route(
"https://playwright.dev/python",
on_route
)
page.goto("https://playwright.dev/python")
page.pause()
from playwright.sync_api import Page, Route
def on_route(route: Route):
response = route.fetch()
body = response.text().replace(
" enables reliable end-to-end testing for modern web apps.",
"is an awesome framework for web automation!"
)
route.fulfill(
response = response,
body = body,
)
def test_docs_link(page: Page):
page.route(
"https://playwright.dev/python",
on_route
)
page.goto("https://playwright.dev/python")
page.pause()
进入页面的某一刻,内容显示为我们所替换的,但很快又刷新为原来的值。