最近,微软开源了一个我的项目叫「playwright-python」,这个我的项目是针对 Python 语言的纯自动化工具,它能够通过单个 API 主动执行 Chromium,Firefox 和 WebKit 浏览器,连代码都不必写,就能实现自动化性能。
相比测试工具 selenium 来说,playwright-python 几乎是小白们的神器。
Playwright 真的实用于 Python 吗?答案是必定的,微软对于实用于 Python 的 Playwright 已准备就绪。可能会产生 API 重大更改。但大概率是这种状况不会产生,微软还示意仅在他们晓得它能够改善您应用新库的体验时,才会可能这样做。不过微软也揭示尚不反对特定于供应商的 API 的某些极其状况,例如收集 Chromium 跟踪,覆盖率报告等。
1. Playwright 介绍
Playwright
是一个弱小的 Python 库,仅用一个 API 即可主动执行 Chromium
、Firefox
、WebKit
等支流浏览器自动化操作,并同时反对以无头模式、有头模式运行。
Playwright 提供的自动化技术是绿色的、功能强大、牢靠且疾速,反对 Linux
、Mac
以及 Windows
操作系统。
2. Playwright 应用
装置
Playwright
的装置非常简单,两步走。
装置 playwright 库
pip install playwright
装置浏览器驱动文件(装置过程略微有点慢)python -m playwright install
复制代码
下面两个 pip 操作别离装置:
- 装置 Playwright 依赖库,须要 Python3.7+
- 装置 Chromium、Firefox、WebKit 等浏览器的驱动文件
录制
应用 Playwright
无需写一行代码,咱们只需手动操作浏览器,它会录制咱们的操作,而后主动生成代码脚本。
上面就是录制的命令codegen
,仅仅一行。
命令行键入 --help 可看到所有选项
python -m playwright codegen
复制代码
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 'my.py' -b chromium https://www.baidu.com
复制代码
命令行输出后会主动关上浏览器,而后能够看见在浏览器上的一举一动都会被主动翻译成代码,如下所示。
完结后主动敞开浏览器,保留生成的自动化脚本到 py 文件。
from playwright import sync_playwright
def run(playwright):
browser = playwright.chromium.launch(headless=False)
context = browser.newContext()
# Open new page
page = context.newPage()
page.goto("https://www.baidu.com/")
page.click("input[name="wd"]")
page.fill("input[name="wd"]", "jingdong")
page.click("text=" 京东 "")
# Click //a[normalize-space(.)='京东 JD.COM 官网 多快好省 只为品质生存']
with page.expect_navigation():
with page.expect_popup() as popup_info:
page.click("//a[normalize-space(.)=' 京东 JD.COM 官网 多快好省 只为品质生存 ']")
page1 = popup_info.value
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright
此外,playwright
还提供了同步和异步的 API 接口,文档如下。
链接:https://microsoft.github.io/playwright-python/index.html
同步
上面示例代码:顺次关上三个浏览器,返回 baidu 搜寻,截图后退出。
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('http://baidu.com/')
await page.screenshot(path=f'example-{browser_type.name}.png')
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
复制代码
挪动端
更厉害的是,playwright
还可反对挪动端的浏览器模仿。上面是官网文档提供的一段代码,模仿在给定地理位置上手机 iphone 11 pro 上的 Safari 浏览器,首先导航到maps.google.com
,而后执行定位并截图。
from playwright import sync_playwright
with sync_playwright() as p:
iphone_11 = p.devices['iPhone 11 Pro']
browser = p.webkit.launch(headless=False)
context = browser.newContext(
**iphone_11,
locale='en-US',
geolocation={'longitude': 12.492507, 'latitude': 41.889938},
permissions=['geolocation']
)
page = context.newPage()
page.goto('https://maps.google.com')
page.click('text="Your location"')
page.screenshot(path='colosseum-iphone.png')
browser.close()
复制代码
另外,还能够配合 pytest
插件一起应用,感兴趣能够本人试一下。
3. 总结
playwright
相比已有的自动化测试工具有很多劣势,比方:
- 跨浏览器,反对 Chromium、Firefox、WebKit
- 跨操作系统,反对 Linux、Mac、Windows
- 可提供录制生成代码性能,解放双手
- 可用于挪动端
- 在 JavaScript,TypeScript,Python,C#和 Java 均可应用 Playwright API。
当初 playwright 曾经更新到了 1.7.0 版本,目前存在的毛病就是生态和文档还不是十分齐备,比方没有 API 中文文档、没有较好的教程和示例供学习。不过置信,随着晓得的人越来越多,将来会越来越好。
GitHub 链接:https://github.com/microsoft/playwright-python
传送门:https://playwright.dev/
开源组织:Microsoft