由于技术的进步,各行各业的门槛越来越低。 以前别人说会selenium就是会自动化。好像很高大上的样子。现在会selenium估计是基本的。大家都忙着内卷,各种轮子越来越多,自动化的门槛也越来越低。
我们聊到自动化,一般会聊到自动化的测试框架。
基于 Selenium 的测试框架: robot framework webdriver Appium 基于JS语言的测试工具: cypress puppeteer 每种自动化框架和工具都有各自的优点吧。
我们用自动化框架的时候,无非就是看重:一:学习成本低;二:使用和维护方便快捷;
上面的框架都不能达到这两个低门槛。现在微软直接将门槛降到零。
最近,微软开源了一个项目叫「playwright-python」这个项目是针对Python语言的纯自动化工具,连代码都不用写,就能实现自动化功能。对于小白来说,只要操作一遍,简单看懂代码,就完事了。 如果页面改变了,大不了重新录制一遍,简直不要太方便了。关键是他可以选择语言,JS, python都可以。
Playwright是一个强大的Python库,仅用一个API即可自动执行Chromium、Firefox、WebKit等主流浏览器自动化操作,并同时支持以无头模式、有头模式运行。
Playwright提供的自动化技术是绿色的、功能强大、可靠且快速,支持Linux、Mac以及Windows操作系统。
好了,说了这么多,来看看怎么使用的吧。
Playwright使用
安装
Playwright
的安装非常简单,两步走。
# 安装playwright库
pip install playwright
# 安装浏览器驱动文件(安装过程稍微有点慢)
python -m playwright install
上面两个pip操作分别安装:
- 安装Playwright依赖库,需要Python3.7
- 安装Chromium、Firefox、WebKit等浏览器的驱动文件
录制
使用Playwright
无需写一行代码,我们只需手动操作浏览器,它会录制我们的操作,然后自动生成代码脚本。
下面就是录制的命令codegen
,仅仅一行。用法可以使用--help
查看,如果简单使用就是直接在命令后面加上url链接,如果有其他需要可以添加options
。
python -m playwright codegen --help
Usage: index codegen [options] [url]
open page and generate code for user actions
Options:
-o, --output <file name> saves the generated script to a file
--target <language> language 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
options含义:
- -o:将录制的脚本保存到一个文件
- --target:规定生成脚本的语言,有
JS
和Python
两种,默认为Python - -b:指定浏览器驱动
比如,我要在baidu.com
搜索,用chromium
驱动,将结果保存为my.py
的python
文件。
python -m playwright codegen --target python -o test.py -b chromium https://www.baidu.com
命令行输入后会自动打开浏览器,然后可以看见在浏览器上的一举一动都会被自动翻译成代码,结束后自动关闭浏览器,保存生成的自动化脚本到py文件。
以下是我随便录制的一个web工具的应用。
代码语言:javascript复制from playwright.sync_api import sync_playwright
def run(playwright):
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
# Open new page
page = context.new_page()
qa_url="https://xxx.cn/dbquery/dbquery.aspx"
stg_url="https://xxx.cn/dbquery/dbquery.aspx"
page.goto(stg_url)
print(page.text_content("[aria-label="Sign-in options"]"))
# Click [placeholder="someone@example.com"]
page.click("[placeholder="someone@example.com"]")
# Fill [placeholder="someone@example.com"]
page.fill("[placeholder="someone@example.com"]"
# Click text=Next
with page.expect_navigation():
page.click("text=Next")
# Click [placeholder="Password"]
page.click("[placeholder="Password"]")
# Fill [placeholder="Password"]
page.fill("[placeholder="Password"]", "Test@")
# Click text=Sign in
page.click("text=Sign in")
# Check [aria-label="Don't show this again"]
page.check("[aria-label="Don't show this again"]")
# Click text=Yes
# with page.expect_navigation(url="https://qadeepblue2.eflabs.cn/dbquery/dbquery.aspx"):
with page.expect_navigation():
page.click("text=Yes")
# assert page.url == "https://login.microsoftonline.com/kmsi"
# Click textarea[name="TxtQuery"]
page.click("textarea[name="TxtQuery"]")
# Fill textarea[name="TxtQuery"]
page.fill("textarea[name="TxtQuery"]", "select top 10* from ET_main.dbo.Members")
# Click text=Execute
page.click("text=Execute")
# Close page
page.close()
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
可以看到,它每步都有注释,assert,你只需要将assert注释打开,就是测试点了,对于小白来说,省时又省力。
此外,playwright
还提供了同步和异步的API接口,文档如下。
链接:https://microsoft.github.io/playwright-python/index.html
同步
下面示例代码:依次打开三个浏览器,前往baidu搜索,截图后退出。
代码语言:javascript复制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('https://baidu.com/')
page.screenshot(path=f'example-{browser_type.name}.png')
browser.close()
异步
异步操作可结合asyncio
同时进行三个浏览器操作。
import asyncio
from playwright import async_playwright
async def main():
async with async_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = await browser_type.launch()
page = await browser.newPage()
await page.goto('https://img.yuanmabao.com/zijie/pic/2021/03/16/me5wha1as3a.html')
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
移动端
更厉害的是,playwright
还可支持移动端的浏览器模拟。
如果你有点技术功底,可以尝试结合其他测试框架,例如pytest等结构化一下,就可以做一个比较漂亮的自动化测试了。
我大概尝试了一下,这个比起selenium来,方便的地方有两点,一:等待时间不需要设定,二:查找元素太方便了。
平时喜欢折腾点爬虫,数据分析等,有的时候某个元素定位不到,或者不稳定,有了这个东西,真实方便又快捷。
Mobile上我还没去尝试,等尝试好了,给大家汇报汇报。