1 小时搞定跨浏览器测试!零基础玩转 Playwright 自动化
Playwright 是由 Microsoft 开发的现代化端到端测试框架,支持 Chromium、Firefox、WebKit 等主流浏览器,并提供跨语言 API(JavaScript/TypeScript、Python、Java、C#)。
它以速度快、稳定性高、异步支持著称,尤其适合复杂 Web 应用的自动化测试和爬虫开发。以下是从零开始的完整入门指南:
一、为什么选择 Playwright?
跨浏览器支持:一套 API 兼容 Chromium、Firefox、WebKit,无需额外驱动。
自动等待机制:操作元素时自动等待其可交互(如点击、输入),减少“flaky tests”。
多语言支持:Python/TypeScript 等主流语言均可编写测试脚本。
高级调试功能:内置录制器、跟踪回放、网络拦截。
并行测试:原生支持并行执行,加速 CI/CD 流程。
对比 Selenium:Playwright 基于 WebSocket 双向通信(非 Selenium 的 HTTP 协议),启动更快且无需管理浏览器驱动版本。
二、环境安装(以 Python 为例)
安装 Python(≥3.7)并验证:
python --version # 需输出3.7+
安装 Playwright 库:
pip install playwright
安装浏览器内核(默认 Chromium):
playwright install chromium # 可选firefox/webkit
若需控制已安装的 Chrome/Edge,启动时指定路径即可。
三、第一个测试脚本
关键步骤:
locator():定位元素(支持 CSS/XPath/Text 选择器)。
fill()/click():自动等待元素可操作后再执行。
wait_for_timeout():强制等待(仅调试用,正式环境改用事件等待)。
⚠️ 注意:避免使用 time.sleep(),会破坏 Playwright 的异步事件机制。
四、核心技巧与功能
元素定位策略:
智能选择器:优先用
page.get_by_text("登录")
或page.get_by_role("button")
,更贴近用户视角。链式操作:
page.locator("div.result").locator("a").click()
。
等待优化:
事件等待:替代
wait_for_timeout
,用page.wait_for_selector(".loaded")
或page.wait_for_response()
。全局超时设置:通过 BrowserContext 调整默认等待时间:
context = browser.new_context(default_timeout=10000) # 10秒超时
录制生成脚本(快速上手神器):playwright codegen https://baidu.com -o test.py
操作浏览器界面,自动生成 Python 脚本(适合基础场景,复杂逻辑需手动优化)。
跟踪调试:
通过 playwright show-trace trace.zip 回放完整执行过程,包括网络请求和 DOM 快照。
五、高级应用场景
模拟登录状态:注入 Cookie 避免重复登录:
拦截网络请求:Mock 接口响应或修改请求:page.route("**/api/data", lambda route: route.fulfill(status=200, body="Mock Data"))多浏览器/设备测试:
并行运行 Chromium/Firefox/WebKit。
模拟移动设备(如 Galaxy S5):
六、最佳实践
项目结构:
配置示例(playwright.config.py):
测试组织:
使用 pytest-playwright 管理测试用例。
通过
@pytest.mark.parametrize
实现数据驱动测试。
持续集成:在 GitHub Actions 中配置 Playwright,自动安装依赖及浏览器。
评论