前言
最近有不少同学问到 Playwright 和 Selenium 的区别是什么?
 有同学可能之前学过 selenium 了,再学一个 playwright 感觉有些多余,可能之前有项目已经是 selenium 写的了,换成 playwright 需要时间成本,并且可能有未知风险。
 也有同学之前可能没学过 selenium ,现在正准备入手一个web 自动化框架,但是对于选择selenium 和 playwright 犹豫不决,因为面试问selenium比较多,可能学了工作中也用不上,仅仅只是应付面试。
 不管出于哪种原因,本篇详细分析 2 者的差异
Playwright 和 Selenium 的区别
| 编号 | 功能 | 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
以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以评论区,留言【777】直接拿走就好了


各位想获取资料的朋友请点赞 + 评论 + 收藏,三连!
三连之后我会在评论区挨个私信发给你们~
