Selenium和play wright都是作为ui自动化的工具, 很方便让我们获取交互页面的信息,对于初学者和开发者,他们两个选型,往往陷入抉择, 今天就带大家一起从角度对比这两个框架.
功能 | Playwright | Selenium | 哪个更优秀 |
学习资料 | 相对少 | 多 | Selenium |
用户群体 | 出现的比较晚,用户量相对少 | 出现的早,用户量多 | Selenium |
支持语言 | TypeScript、JavaScript、Python、.NET、Java | C#,Java,Perl,PHP,Python 和Ruby | Selenium |
支持浏览器 | Chromium(包含chrome, msedge)、WebKit 和 Firefox | IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera,Edge等 | Selenium |
跨平台 | Windows,Linux(只支持Ubuntu部分系统) ,Mac | Windows,Linux,Mac 都支持 | Selenium |
浏览器安装 | 命令行安装 | 自己安装 | Playwright |
浏览器驱动 | 不需要驱动 | 下载对应版本驱动 | Playwright |
启动速度 | 快 | 慢 | Playwright |
context 环境隔离 | 有 | 无 | Playwright |
headless 无头模式 | 默认headless, 也可以设置GUI | 默认GUI模式,也可以设置headless | Playwright |
无痕模式 | 默认无痕模式,对应测试很有帮助,对于爬虫用户可能访问页面不通过 | 默认非无痕默认,爬虫用户特别喜欢 | Selenium |
页面等待 | wait_for_load_state可以精准等待commit,domcontentloaded,load,networkidle四种状态 | implicitly_wait等待页面加载完成 | Playwright |
元素定位 | 提供多个内置定位器,定位方式更贴近业务,定位方式更多 | 八大定位 | Playwright |
元素等待 | 定位元素自带等待机制 | 需要自己封装等待方法 | Playwright |
点击元素等操作 | 会判断元素状态,出现位置,是否可点击智能判断 | 需要自己封装webdriverwait.until方法,难度较大 | Playwright |
定位报错 | 会人性化告诉你定位到几个元素,并推荐定位方式 | 报错需要自己去猜谜,自己排除各种可能性 | Playwright |
元素不在当前屏幕 | 会判断元素位置,自动滚动元素出现位置 | 需要自己去判断滚动 | Playwright |
iframe | 通过对象操作,不用切换 | 需要来回切换 | Playwright |
alert | 默认监听自动关闭,可以异步监听 | 需要自己判断,无异步监听 | Playwright |
文件上传 | 监听文件上传时间,处理优雅 | 无法解决非input 上传 | Playwright |
文件下载 | 可以监听下载 | 只能设置浏览器默认位置 | Playwright |
多窗口标签 | 可以监听窗口事件,操作方便 | 需要来回切换 | Playwright |
事件监听 | 可以监听各种事件 | 无法监听 | Playwright |
捕获ajax 请求 | 可以捕获ajax 请求和 返回 | 无法捕获 | Playwright |
mock 功能 | 可以模拟想要的任何接口数据 | 无mock 功能 | Playwright |
断言 | 提供expect 丰富断言 | 需要自己封装webdriverwait.until方法,难度较大 | Playwright |
录制视频 | 录制用例视频 | 无 | Playwright |
trace 追踪 | 有 | 无 | Playwright |
断点调试 | 有 | 无 | Playwright |
录制 | 可以生成pytest用例 | 录制功能比较简单 | Playwright |
鼠标键盘操作 | 调用简单方便 | 导入模块,操作复杂 | Playwright |
base_url | 可以添加全局base_url | 无此功能 | Playwright |
接口测试 | 提供接口测试 | 无此功能 | Playwright |
grid 分布式 | 无 | selenium-grid 分布式 | Selenium |
协议 | websockt 协议,可以实时获取页面状态 | http 协议,只能获取当时的状态,需自己轮询判断 | Playwright |
执行JavaScript | 可以在page,iframe,元素对象执行JavaScript | 只能在driver对象执行JavaScrip | Playwright |
async异步 | 有同步和异步2种方式 | 无异步代码 | Playwright |
面试 | 要求playwright 比较少 | 问selenium 比较多 | Selenium |
学习难易程度 | 容易,无需封装,直接用 | 难度较大,需要封装 | Playwright |
总结:
Playwright的优点是简单方便、功能强大、稳定性高,缺点是相对新,用户群体少,学习资料少。
Selenium的优点是灵活性高、用户群体大、学习资料多,缺点是需要自己封装或者导入其他模块来实现一些功能,启动速度慢,稳定性差, 但好在生态好.