测试帮日记-小强测试品牌旗下

Playwright自动化测试工具之快速实战

2021-03-29 10:14:00    刘斌宇    857    原创

1. 前言
只要说到自动化,测试和开发的朋友们都知道selenium。一个自动化测试的神器工具,写个Python自动化脚本解放双手基本上是常规的操作了。虽然selenium有完备的文档,但也需要一定的学习成本,对于一个纯小白来讲还是有些门槛的。如果你不愿意花大量的时间在学习定位编写脚本上,就可以尝试下今天的主角:微软的一个开源项目「playwright-python」,这个项目是针对Python语言的纯自动化工具,连代码都不用写,就能实现自动化功能。
1.1基本介绍
Playwright微软开发的e2e测试工具,可以提供比selenium更快更强功能,下一代端到端测试工具。v1.0 在2020年5月6日发布,是node.js的程序。而playwright-python是playwright的python客户端,允许python代码编写用例,调用playwright完成测试
为什么要使用playwright?网上有很多说法,我就不一一列举。最吸引我的就是三个特点:
1. 支持浏览器端的录制,生成自动化脚本,支持无头跑脚本
2. 速度快,基本是selenium的好几倍,且支持浏览器异步运行
3. 自动等待API,可拦截请求,随意mock
2. 快速使用
2.1 安装
项目地址:https://github.com/microsoft/playwright-python
注意:python版本需要时至少3.7 及以上,推荐3.8及以上
安装命令:
pip install playwright(使用阿里源,下载速度快一点)


备注:pip install playwright==1.9.0 (建议使用1.9.0以后的版本,增加调试,很爽)
 
python -m playwright install (安装chromium、frefox、webkit)



备注:不需要像selenium 再单独安装浏览器驱动,它在 pip install 时就会安装浏览器的驱动文件。
2.1.1 下载提速方案
第二步的操作,可以看到其主要下载了3个浏览器的内核,直接将提前下载好的对应文件存放到该路径就可以不用下载了。
地址如下:
C:WindowsSystem32configsystemprofileAppDataLocalms-playwright
下载包地址:
https://kdocs.cn/l/crj83h6w0YDl
[金山文档] ms-playwright.zip
2.2 录制使用
录制代码:python -m playwright codegen
playwright很强大,在命令行键入 --help 可看到所有选项。


具体含义:
-h 展示所有的命令
–target 用什么语言去生成
-o 将脚本保存为一个文件
用百度举一个简单的例子:
python -m playwright codegen --target python -o binyuTest.py' -b chromium https://www.baidu.com
就会打开百度网页,录制的代码都会生成在当前目录下的binyuTest.py文件中,篇幅过长暂不展示,具体的操作可以在https://playwright.dev/上找到详细的doc和api接口文档
2.2.1 录制代码高级使用
–save-storage与–load-storage是个非常实用的命令,可以保存登录状态、加载登录状态
如下使用录制会保存登录状态文件
python -m playwright codegen --target python -o formsavecookie.py -b chromium f.wps.cn/picker --save-storage formTest134
如下使用录制会加载登录状态文件
python -m playwright codegen --target python -o formgetcookie.py -b chromium f.wps.cn/form-list  --load-storage formTest134
2.2.2 录制视频
recordVideo参数设置视频地址和录制屏幕的大小,dir必须存在,否则不能录制;size不填默认录制屏幕大小;如果填写,则录取指定长宽的区域


2.3 编写代码
代码如下:
1. 分别使用chrom、firefox、sarafi浏览器打开浏览器,然后百度一下,接着对在搜索界面截图,最后关闭浏览器


注意:
Ø with 上下文管理器,自动关闭浏览器和playwright,Playwright-cli只能启用一个
Ø browser.close() 手动关闭,不必须,但是建议大家手动关闭
Ø 每个Page都是一个实例,解决了页面切换的问题,天生POM
2. 结合 asyncio,异步实现同时执行上面的操作。