相信玩过爬虫的朋友都知道selenium
,一个自动化测试的神器工具。写个Python
自动化脚本解放双手基本上是常规的操作了,爬虫爬不了的,就用自动化测试凑一凑。
虽然selenium
有完备的文档,但也需要一定的学习成本,对于一个纯小白来讲还是有些门槛的。
同时最近被自动化折磨得非常痛苦,为了实现e2e测试,我们花大量的时间来编写e2e代码,同时此类代码也非常不稳定,经常挂掉,这一点来说是非常的不友好的。作为一个“懒人”,我肯定不愿意花大量的时间在编写测试上,所以就在互联网上找寻一些可以替代的工具来加速我们的效率。所以才有了今天这篇博客。
最近,微软开源了一个项目叫「playwright-python
」,简直碉堡了!这个项目是针对Python
语言的纯自动化工具,连代码都不用写,就能实现自动化功能。
1.Playwright基本介绍
Playwright is a Python library to automate Chromium, Firefox and WebKit browsers with a single API. Playwright delivers automation that is ever-green, capable, reliable and fast.
Playwright 是一款基于python语言的自动化测试工具,可以通过一个简单的API实现在chromium,Firefox,Webkit浏览器上执行自动化操作,其自动化能力可靠而性能优秀。能够完美适配三大主流浏览器。
2.Playwright使用
2.1 安装
该依赖的安装很简单,命令如下。
pip install playwright
python -m playwright install
第一条是安装playwright依赖,第二条是安装chromium,webkit,firefox的基本依赖。
这里唯一需要注意的是playwright必须要在python 3.7以上才能准确运行
记录并且生产代码
playwright提供了记录用户在浏览器的操作,并生成对应代码的能力。具体的操作命令如下。
python -m playwright codegen
playwright很强大,在命令行键入 --help 可看到所有选项。
python3 -m playwright codegen --help
Usage: index codegen [options] [url]
open page and generate code for user actions
Options:
-o, --outputsaves the generated script to a file // 输出的文件名称
--targetlanguage to use, one of javascript, python, python-async, csharp (default: "python") // 输出的语言
-h, --help display help for command //帮助Examples:
$ codegen
$ codegen --target=python
$ -b webkit codegen https://example.com
具体含义
-h 展示所有的命令
--target 用什么语言去生成
-o 将脚本保存为一个文件
2.2 开始使用
这里用百度举一个简单的例子
python -m playwright codegen --target python -o 'shortcut.py' -b chromium https://www.baidu.com
下图是通过录制产生的代码,具体录制的视频如下
视频链接如下:https://www.bilibili.com/video/BV1pV411h743/
生成的自动化脚本如下
from playwright import sync_playwright
def run(playwright):
browser = playwright.chromium.launch(headless=False)
context = browser.newContext()
# Open new page
page = context.newPage()
# Go to https://www.baidu.com/
page.goto("https://www.baidu.com/")
# Click input[name="wd"]
page.click("input[name=\"wd\"]")
# Fill input[name="wd"]
page.fill("input[name=\"wd\"]", "")
# Press CapsLock
page.press("input[name=\"wd\"]", "CapsLock")
# Fill input[name="wd"]
page.fill("input[name=\"wd\"]", "腾讯文档")
# Click input[type="submit"]
page.click("input[type=\"submit\"]")
# Click text="-官方网站-支持多人在线编辑Word、Excel..."
# with page.expect_navigation(url="https://docs.qq.com/"):
with page.expect_navigation():
with page.expect_popup() as popup_info:
page.click("text=\"-官方网站-支持多人在线编辑Word、Excel...\"")
page1 = popup_info.value
# Close page
page1.close()
# Close page
page.close()
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
接下来尝试对之前的操作进行重放。
操作重放如下:https://www.bilibili.com/video/BV1WK4y1L7qc/
经过上述操作就完成了一个简单web页面的录制,重放操作。
具体的操作我们可以在https://playwright.dev/上找到详细的doc和api接口文档。
2.3 编写代码
当然playwright也不仅仅是录制代码,可以编写一定的代码。
根据官方的git仓库readme的实例代码,我们实现了一个截图逻辑,大体意思是我们分别通过chrome,firefox,webkit来实现截图操作。
from playwright import sync_playwright
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch()
page = browser.newPage()
page.goto('http://baidu.com/')
page.screenshot(path=f'example-{browser_type.name}.png')
browser.close()
截图结果
3.总结
通过上述文档的描述,我们就可以发现playwright作为自动化测试工具还是有很多优势的。
1.跨浏览器支持:通过官方介绍我们可以得知playwright是全平台兼容的(chrome,firefox,webkit)。
2.跨操作系统支持:其同时支持Linux,Mac,window。
3.提供了代码录制功能:能够录制js,ts,py等代码,大大的提高了我们的效率。
4.可用于移动端使用。
5.同时python作为自动化语言,让前端自动化有了更多的可能,比如说图像对比,文本相似度对比等,python比js拥有更加强大的生态支持。
4.一些探索
我觉得playwright,我们可以在其上面做很多事情,比如根据我们的业务进行二次适配和扩展,让playwright能够完美运行到我们的业务产品上,这一点我觉得是可行的,是容易的。
未来我打算基于playwright的基础上,尝试探索适配我们的业务系统,从而提高我们的自动化编写效率。
5.参考链接
https://playwright.dev/docs/why-playwright playwright
https://github.com/microsoft/playwright-python git仓库
https://blog.csdn.net/yuxiaosmd/article/details/111147119 csdn博客