测试生成器
Playwright 具有开箱即用的生成测试的能力,这是快速开始测试的好方法。它将打开两个窗口,一个浏览器窗口,您可以在其中与要测试的网站进行交互,另一个是 Playwright Inspector 窗口,您可以在其中录制测试、复制测试、清除测试以及更改测试语言。
运行 Codegen
playwright codegen demo.playwright.dev/todomvc
运行 codegen 并在浏览器中执行操作。Playwright 将为用户交互生成代码。Codegen 将尝试生成弹性的基于文本的选择器。
模拟视口大小
Playwright 打开一个浏览器窗口,其视口设置为特定的宽度和高度,并且不是响应式的,因为测试需要在相同的条件下运行。使用 --viewport 选项生成具有不同视口大小的测试。
playwright codegen --viewport-size=800,600 playwright.dev

模拟设备
使用 --device 选项模拟移动设备录制脚本和测试,该选项设置视口大小和用户代理等。
playwright codegen --device="iPhone 11" playwright.dev

模拟配色方案
使用 --color-scheme 选项模拟配色方案录制脚本和测试。
playwright codegen --color-scheme=dark playwright.dev

模拟地理位置、语言和时区
使用 --timezone、--geolocation 和 --lang 选项模拟时区、语言和位置录制脚本和测试。页面打开后,点击地图右下角的"显示您的位置"图标以查看地理位置的实际效果。
playwright codegen --timezone="Europe/Rome" --geolocation="41.890221,12.492348" --lang="it-IT" maps.google.com

保留认证状态
使用 --save-storage 运行 codegen 以在会话结束时保存 cookies 和 localStorage。这对于单独记录身份验证步骤并在以后的测试中重用它非常有用。
执行身份验证并关闭浏览器后,auth.json 将包含存储状态。
playwright codegen --save-storage=auth.json

使用 --load-storage 运行以使用以前加载的存储。这样,所有 cookies 和 localStorage 都将恢复,使大多数 Web 应用程序进入已验证状态,而无需再次登录。
playwright codegen --load-storage=auth.json github.com/microsoft/playwright

使用带有 --load-storage 的 open 命令打开保存的 auth.json。
playwright open --load-storage=auth.json github.com/microsoft/playwright
使用自定义设置录制
如果您想在某些非标准设置中使用 codegen(例如,使用 browser_context.route(url, handler, **kwargs)),可以调用 page.pause(),它将打开一个带有 codegen 控件的单独窗口。
- Sync
- Async
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# Make sure to run headed.
browser = p.chromium.launch(headless=False)
# Setup context however you like.
context = browser.new_context() # Pass any options
context.route('**/*', lambda route: route.continue_())
# Pause the page, and start recording manually.
page = context.new_page()
page.pause()
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
# Make sure to run headed.
browser = await p.chromium.launch(headless=False)
# Setup context however you like.
context = await browser.new_context() # Pass any options
await context.route('**/*', lambda route: route.continue_())
# Pause the page, and start recording manually.
page = await context.new_page()
await page.pause()
asyncio.run(main())