一、playwright简介
1.1 playwright定义
- Web自动化测试框架;
- 支持跨平台多语言;
- 支持Chrome、FireFox、Webkit等主流浏览器自动化操作。
1.2 playwright优点
- 支持所有流行的浏览器;
- 速度更快、执行更可靠;
- 更强大的自动化测试配置;
- 强大的工具库:Codegen、Playwright inspector、Trace Viewer。
1.3 Playwright vs seleium
序号 | 比较项目 | Playwright | Selenium | 评分 | 谁胜出 |
---|---|---|---|---|---|
1 | 安装难易度 | 安装较为简便,依赖少 | 安装过程相对复杂,依赖较多 | 8:6 | Playwright |
2 | 编程语言支持 | 支持多种主流语言 | 支持多种主流语言 | 8:8 | 平手 |
3 | 浏览器兼容性 | 对主流浏览器兼容性好 | 对主流浏览器兼容性好 | 8:8 | 平手 |
4 | 跨平台性 | 良好的跨平台支持 | 跨平台性较好 | 8:7 | Playwright |
5 | 文档质量 | 文档清晰详细 | 文档较为全面 | 8:7 | Playwright |
6 | API 设计 | 简洁直观 | 相对复杂一些 | 8:7 | Playwright |
7 | 性能 | 性能较高 | 性能一般 | 8:7 | Playwright |
8 | 异步支持 | 优秀的异步处理 | 异步处理稍显复杂 | 8:7 | Playwright |
9 | 等待机制 | 灵活多样 | 有多种等待方式,但稍显复杂 | 8:7 | Playwright |
10 | 元素定位 | 方便准确 | 较为准确 | 8:7 | Playwright |
11 | 稳定性 | 稳定性较好 | 稳定性一般 | 8:7 | Playwright |
12 | 错误处理 | 清晰明确 | 相对复杂 | 8:7 | Playwright |
13 | 并发执行 | 支持高效并发 | 并发执行稍弱 | 8:7 | Playwright |
14 | 移动端测试 | 支持较好 | 支持一般 | 8:7 | Playwright |
15 | 无头模式支持 | 支持良好 | 支持良好 | 8:8 | 平手 |
16 | 录制功能 | 有录制功能 | 录制功能相对较弱 | 8:7 | Playwright |
17 | 社区活跃度 | 社区逐渐活跃 | 社区非常活跃 | 7:8 | Selenium |
18 | 插件丰富度 | 插件相对较少 | 插件丰富 | 7:8 | Selenium |
19 | 更新频率 | 更新较快 | 更新频率一般 | 8:7 | Playwright |
20 | 学习曲线 | 相对较平缓 | 学习曲线稍陡 | 8:7 | Playwright |
21 | 对新特性支持 | 快速支持新特性 | 支持新特性稍慢 | 8:7 | Playwright |
22 | 代码可读性 | 代码简洁,可读性高 | 代码相对复杂,可读性一般 | 8:7 | Playwright |
23 | 与 CI/CD 集成 | 集成方便 | 集成相对复杂 | 8:7 | Playwright |
24 | 支持的浏览器版本范围 | 较广 | 一般 | 8:7 | Playwright |
25 | 对 WebRTC 的支持 | 支持较好 | 支持一般 | 8:7 | Playwright |
26 | 对 HTML5 特性支持 | 支持良好 | 支持一般 | 8:7 | Playwright |
27 | 对 CSS3 特性支持 | 支持良好 | 支持一般 | 8:7 | Playwright |
28 | 对 JavaScript 框架支持 | 支持良好 | 支持一般 | 8:7 | Playwright |
29 | 对前端框架的兼容性 | 兼容性好 | 兼容性一般 | 8:7 | Playwright |
30 | 支持的操作系统 | 多操作系统支持 | 多操作系统支持 | 8:8 | 平手 |
31 | 内存占用 | 相对较低 | 较高 | 8:7 | Playwright |
32 | 执行速度 | 速度较快 | 速度一般 | 8:7 | Playwright |
33 | 对动态页面处理 | 处理能力强 | 处理能力一般 | 8:7 | Playwright |
34 | 对 AJAX 请求的处理 | 处理优秀 | 处理一般 | 8:7 | Playwright |
35 | 对 iframe 的处理 | 处理方便 | 处理稍复杂 | 8:7 | Playwright |
36 | 对表单提交的处理 | 处理准确 | 处理一般 | 8:7 | Playwright |
37 | 对弹窗的处理 | 处理灵活 | 处理稍复杂 | 8:7 | Playwright |
38 | 对鼠标和键盘事件模拟 | 模拟自然 | 模拟稍复杂 | 8:7 | Playwright |
39 | 对文件上传下载的支持 | 支持良好 | 支持一般 | 8:7 | Playwright |
40 | 对网络请求拦截的支持 | 支持较好 | 支持一般 | 8:7 | Playwright |
二、playwright核心工具
- Codegen:能够记录用户的操作,并将其转化为测试用例,且可以保存为任何语言的测试代码。
- Playwright Inspector:可用于检查页面状态,生成精准的选择器,能够逐步执行测试,清晰地查看点击位置,还能探索详细的执行日志。
- Trace Viewer:能够捕获所有关键信息,以便在测试失败时进行深入调查。Playwright 的跟踪功能十分强大,包含测试执行过程中的截屏、实时的 DOM 快照、动作资源管理器以及测试的源代码等内容。
三、playwright环境安装
- 安装playwright插件:
pip install pytest-playwright
- 安装所需的浏览器:
playwright install
详细的安装指南可前往:Playwright 的安装 | 静觅 进行查看。在成功完成安装后,我们就能运用 Playwright 开启 Chromium、Firefox 或者 WebKit 浏览器,从而开展自动化操作了。
录制
playwright codegen 需要录制的网址,如:
- playwright codegen http://www.baidu.com
脚本切换&生成测试用例
在inspector 窗口可以切换腳本語言,选择pytest后,会自动生成对应的测试用例
搜圖,下載↓
import re
from playwright.sync_api import Page, expect
def test_example(page: Page) -> None:
page.goto("https://www.baidu.com/")
with page.expect_popup() as page1_info:
page.get_by_role("link", name="图片").click()
page1 = page1_info.value
page1.get_by_placeholder("拖入图片/输入文字").click()
page1.get_by_placeholder("拖入图片/输入文字").fill("澳門酒店logo")
page1.get_by_placeholder("拖入图片/输入文字").press("Enter")
page1.get_by_role("button", name="百度一下").click()
with page1.expect_download() as download_info:
page1.get_by_role("link", name="下载原图").click()
download = download_info.value