Playwright CodeGen Python 完整指南
概述
python -m playwright codegen --target=python -b chromium 是 Playwright 提供的强大命令,专门用于生成 Python 语言的自动化测试代码。通过录制用户在 Chromium 浏览器中的操作,自动生成对应的 Python Playwright 测试脚本。
命令详解
python -m playwright codegen --target=python -b chromium
参数说明
python -m playwright codegen: 启动 Playwright 代码生成器--target=python: 指定生成的代码语言为 Python-b chromium: 指定使用 Chromium 浏览器进行录制
环境准备
安装 Playwright
# 安装 Playwright
pip install playwright
# 安装浏览器
python -m playwright install
验证安装
python -m playwright --version
基础使用
1. 启动录制
# 基础命令
python -m playwright codegen --target=python -b chromium
# 指定起始网址
python -m playwright codegen --target=python -b chromium https://example.com
# 保存到文件
python -m playwright codegen --target=python -b chromium --output=test_script.py
2. 录制界面介绍
启动命令后,会打开两个窗口:
- 浏览器窗口:用于执行操作的 Chromium 浏览器
- Playwright Inspector:显示生成的代码和控制录制
高级选项
设备模拟
# 模拟移动设备
python -m playwright codegen --target=python -b chromium --device="iPhone 12"
# 模拟平板设备
python -m playwright codegen --target=python -b chromium --device="iPad Pro"
# 自定义视窗大小
python -m playwright codegen --target=python -b chromium --viewport-size=1280,720
网络和性能选项
# 模拟慢速网络
python -m playwright codegen --target=python -b chromium --timezone="Asia/Shanghai"
# 设置语言
python -m playwright codegen --target=python -b chromium --lang="zh-CN"
# 禁用图片加载
python -m playwright codegen --target=python -b chromium --load-storage=auth.json
生成的代码结构
典型的生成代码如下:
import re
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
# 导航到页面
page.goto("https://example.com")
# 点击操作
page.click("button[type='submit']")
# 输入操作
page.fill("input[name='username']", "test_user")
# 断言
expect(page.locator("h1")).to_contain_text("Welcome")
# 关闭浏览器
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
实用技巧
1. 录制技巧
- 慢速操作:录制时动作要相对缓慢,确保所有操作都被捕获
- 等待加载:等待页面完全加载后再进行下一步操作
- 明确点击:确保点击的元素清晰可见
- 避免重复:避免不必要的重复操作
2. 断言添加
在录制过程中,可以通过以下方式添加断言:
- 在 Inspector 中点击 "Assert" 按钮
- 在浏览器中选择要验证的元素
- 选择断言类型(文本、可见性、属性等)
3. 选择器优化
生成的代码可能包含以下类型的选择器:
# 优先使用的选择器(按优先级排序)
page.click("data-testid=submit-button") # 测试ID
page.click("role=button[name='Submit']") # 角色和名称
page.click("text=Submit") # 文本内容
page.click("#submit-btn") # ID选择器
page.click(".btn-primary") # 类选择器
page.click("button:nth-child(2)") # CSS选择器
常见使用场景
1. 表单填写测试
# 录制表单填写流程
python -m playwright codegen --target=python -b chromium --output=form_test.py https://forms.example.com
2. 登录流程测试
# 录制登录流程
python -m playwright codegen --target=python -b chromium --output=login_test.py https://app.example.com/login
3. 电商购物流程
# 录制购物流程
python -m playwright codegen --target=python -b chromium --output=shopping_test.py https://shop.example.com
代码优化建议
1. 添加错误处理
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
try:
page = context.new_page()
page.goto("https://example.com")
# 你的测试代码
except Exception as e:
print(f"测试执行出错: {e}")
finally:
context.close()
browser.close()
2. 使用页面对象模式
class LoginPage:
def __init__(self, page):
self.page = page
self.username_input = page.locator("input[name='username']")
self.password_input = page.locator("input[name='password']")
self.submit_button = page.locator("button[type='submit']")
def login(self, username: str, password: str):
self.username_input.fill(username)
self.password_input.fill(password)
self.submit_button.click()
3. 添加等待和重试
# 等待元素可见
page.wait_for_selector("button[type='submit']", state="visible")
# 等待网络空闲
page.wait_for_load_state("networkidle")
# 等待特定条件
page.wait_for_function("() => document.readyState === 'complete'")
调试技巧
1. 启用调试模式
# 启用调试模式
PWDEBUG=1 python test_script.py
2. 慢速执行
browser = playwright.chromium.launch(headless=False, slow_mo=1000) # 每个操作延迟1秒
3. 截图调试
# 在关键步骤截图
page.screenshot(path="debug_screenshot.png")
注意事项
- 选择器稳定性:生成的选择器可能不够稳定,需要手动优化
- 动态内容:对于动态加载的内容,可能需要添加适当的等待
- 环境差异:在不同环境中运行可能需要调整配置
- 数据清理:测试前后要注意数据的准备和清理
- 并发执行:多个测试并发执行时要注意资源竞争
最佳实践
- 模块化代码:将生成的代码重构为可复用的函数或类
- 参数化测试:使用参数化来测试不同的数据组合
- 持续集成:集成到CI/CD流程中实现自动化测试
- 定期维护:随着应用更新,及时维护测试代码
- 文档记录:为生成的测试用例添加清晰的文档说明
总结
python -m playwright codegen --target=python -b chromium 是一个非常实用的工具,可以大大提高测试开发效率。通过合理使用这个工具,结合手动优化和最佳实践,可以创建出稳定、可维护的自动化测试套件。