简介
Playwright是微软开源的一款自动化测试工具,支持Python、Java、Node.js、.NET,目前最新版本的为1.14,暂时没有中文文档。可快速实现在主流的浏览器上的自动化测试。
优势
浏览器支持
- Playwright有全面的API,支持现主流的浏览器,Chrome、Microsoft Edge (Chromium)、Apple Safari (WebKit)和Firefox。无需额外下载浏览器驱动,在下载Playwright库时就已自动下载浏览器驱动文件。
- 跨平台WebKit测试:支持在Windows、Linux、MacOS上进行通过WebKit实现Apple Safari测试
- Playwright支持通过设置手机型号进行移动端Web browsers测试
- 支持无头、有头浏览器模式运行
快速稳定的执行
- Playwright提供自动等待API,自动等待元素出现(自动等待30s,等待时间可以自定义,单位毫秒),自动等待时间发送
- 自动识别浏览器超时。Playwright可以接收浏览器信号,如网络请求、页面导航和页面加载事件,以解决设置不稳定的睡眠时间的需要
- 快速隔离浏览器环境:Playwright支持上一个执行完成的浏览器实例作为下一个执行的开始
- 更加灵活的元素定位:Playwright支持面向用户的字符串定位,如通过文本内容和可访问标签来定位元素。
强大的自动化功能
- 支持多个域、页面和表单。 Palywright是一个 进程外(out-of-process) 自动化驱动程序,它不受页内JavaScript执行范围的限制,可以自动处理多个页面的场景
- 强大的网络控制。Playwright引入上下文的网络监听来阻断或mock网络请求
- Playwright支持文件上传下载、切换iframes、原生输入事件,还可以切换浏览器的模式(Light or Dark mode)
安装上手使用(Python)
- 在Python环境安装,建议版本3.7以上
pip install playwright
- 安装浏览器的驱动文件
python -m playwright install
完成以上两个步骤即可开始正式试用Playwright
Playwright支持两种形式的API:synchronous(同步)和 asynchronous(异步),因为Playwright默认是用的无头模式,为了看到效果,这里修改了默认参数,改为了有头模式。下面分别这两种调用方式跑同一个示例测试流程:
- 同步执行:
# 打开谷歌浏览器,输入‘http://www.baidu.com’并跳转,等待页面加载完毕,答应当前页面的的title,关闭浏览器
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("http://www.baidu.com")
print(page.title())
browser.close()
- 异步执行:
# 打开谷歌浏览器,输入‘http://www.baidu.com’并跳转,等待页面加载完毕,答应当前页面的的title,关闭浏览器
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
await page.goto("http://www.baidu.com")
print(await page.title())
await browser.close()
asyncio.run(main())
Playwright支持屏幕截图,无头有头模式都可截图:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("http://www.baidu.com")
# 浏览器截图,无头模式也可截图。默认为当前执行路径
page.screenshot(path='example.png')
browser.close()
Playwright支持脚本录制:
通过python命令行的方式可以进行脚本录制
python -m playwright codegen
输入 --help查看相关使用方法
可以看到其功能是很齐全,这里只是简单介绍使用,后续会单独重点对这部分进行讲解。
Playwright可以与Pytest结合使用: 使用第三方库pytest-playwright
Playwright可与Pyinstaller结合使用,完全兼容。将浏览器与执行文件捆绑在一起将生成更大的二进制文件。 建议只捆绑需要使用的浏览器
已知问题
使用time.sleep()
会导致超时问题:
建议使用page.wait_for_timeout(毫秒)
替换time module的time.sleep(秒)
,会很好改善超时问题。因为Playwright内部是依赖于异步操作,而当使用time.sleep(秒)
时,无法正确处理这种情况。
系统要求
Playwright 需要python3.7以上,适用在三个平台(Windows,macOS,Linux)上的三种浏览器:Chromium,Firefox , WebKit
Windows:适用于 Windows 和适用于 Linux 的 Windows 子系统 (WSL)
macOS:需要 10.14 (Mojave) 或更高版本
Linux:取决于使用的Linux发行版本,可能会需要安装额外的依赖来运行浏览器。目前仅Ubuntu 18.04和Ubuntu 20.04 完全兼容支持。