最近有不少同学问到 Playwright 和 Selenium 的区别是什么? 有同学可能之前学过 selenium 了,再学一个 playwright 感觉有些多余,可能之前有项目已经是 selenium 写的了,换成 playwright 需要时间成本,并且可能有未知风险。 也有同学之前可能没学过 selenium ,现在正准备入手一个web 自动化框架,但是对于选择selenium 和 playwright 犹豫不决,因为面试问selenium比较多,可能学了工作中也用不上,仅仅只是应付面试。 不管出于哪种原因,本篇详细分析 2 者的差异
编号 | 功能 | Playwright | Selenium | 哪个更优秀 |
---|---|---|---|---|
1 | 学习资料 | 相对少 | 多 | Selenium |
2 | 用户群体 | 出现的比较晚,用户量相对少 | 出现的早,用户量多 | Selenium |
3 | 支持语言 | TypeScript、JavaScript、Python、.NET、Java | C#,Java,Perl,PHP,Python 和Ruby | Selenium |
4 | 支持浏览器 | Chromium(包含chrome, msedge)、WebKit 和 Firefox | IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera,Edge等 | Selenium |
5 | 跨平台 | Windows,Linux(只支持Ubuntu部分系统) ,Mac | Windows,Linux,Mac 都支持 | Selenium |
6 | 浏览器安装 | 命令行安装 | 自己安装 | Playwright |
7 | 浏览器驱动 | 不需要驱动 | 下载对应版本驱动 | Playwright |
8 | 启动速度 | 快 | 慢 | Playwright |
9 | context 环境隔离 | 有 | 无 | Playwright |
10 | headless 无头模式 | 默认headless, 也可以设置GUI | 默认GUI模式,也可以设置headless | Playwright |
11 | 无痕模式 | 默认无痕模式,对应测试很有帮助,对于爬虫用户可能访问页面不通过 | 默认非无痕默认,爬虫用户特别喜欢 | Selenium |
12 | 页面等待 | wait_for_load_state可以精准等待commit,domcontentloaded,load,networkidle四种状态 | implicitly_wait等待页面加载完成 | Playwright |
13 | 元素定位 | 提供多个内置定位器,定位方式更贴近业务,定位方式更多 | 八大定位 | Playwright |
14 | 元素等待 | 定位元素自带等待机制 | 需要自己封装等待方法 | Playwright |
15 | 点击元素等操作 | 会判断元素状态,出现位置,是否可点击智能判断 | 需要自己封装webdriverwait.until方法,难度较大 | Playwright |
16 | 定位报错 | 会人性化告诉你定位到几个元素,并推荐定位方式 | 报错需要自己去猜谜,自己排除各种可能性 | Playwright |
17 | 元素不在当前屏幕 | 会判断元素位置,自动滚动元素出现位置 | 需要自己去判断滚动 | Playwright |
18 | iframe | 通过对象操作,不用切换 | 需要来回切换 | Playwright |
19 | alert | 默认监听自动关闭,可以异步监听 | 需要自己判断,无异步监听 | Playwright |
20 | 文件上传 | 监听文件上传时间,处理优雅 | 无法解决非input 上传 | Playwright |
21 | 文件下载 | 可以监听下载 | 只能设置浏览器默认位置 | Playwright |
22 | 多窗口标签 | 可以监听窗口事件,操作方便 | 需要来回切换 | Playwright |
23 | 事件监听 | 可以监听各种事件 | 无法监听 | Playwright |
24 | 捕获ajax 请求 | 可以捕获ajax 请求和 返回 | 无法捕获 | Playwright |
25 | mock 功能 | 可以模拟想要的任何接口数据 | 无mock 功能 | Playwright |
26 | 断言 | 提供expect 丰富断言 | 需要自己封装webdriverwait.until方法,难度较大 | Playwright |
27 | 录制视频 | 录制用例视频 | 无 | Playwright |
28 | trace 追踪 | 有 | 无 | Playwright |
29 | 断点调试 | 有 | 无 | Playwright |
30 | 录制 | 可以生成pytest用例 | 录制功能比较简单 | Playwright |
31 | 鼠标键盘操作 | 调用简单方便 | 导入模块,操作复杂 | Playwright |
32 | base_url | 可以添加全局base_url | 无此功能 | Playwright |
33 | 接口测试 | 提供接口测试 | 无此功能 | Playwright |
34 | grid 分布式 | 无 | selenium-grid 分布式 | Selenium |
35 | 协议 | websockt 协议,可以实时获取页面状态 | http 协议,只能获取当时的状态,需自己轮询判断 | Playwright |
36 | 执行JavaScript | 可以在page,iframe,元素对象执行JavaScript | 只能在driver对象执行JavaScrip | Playwright |
37 | 面试 | 要求playwright 比较少 | 问selenium 比较多 | Selenium |
38 | 学习难易程度 | 容易,无需封装,直接用 | 难度较大,需要封装 | Playwright |
总体打分Selenium 8分, Playwright 30 分,如果你是新手,毫不犹豫应该直接学playwright