Playwright 是 2020 年初由微软公司发布的自动化测试工具。不少人称它为小白神器。
1Playwright 介绍
Playwright 是一个强大的 Python 库,为 Chromium、Firefox 和 WebKit 浏览器的自动化操作提供了统一的 API。Playwright 宗旨是实现持久、功能强大、可靠且快速的跨浏览器的 Web 自动化操作。
Playwright 支持 Linux、Mac 以及 Windows 操作系统。Playwright 基于 Puppeteer但又向 Selenium 取了经,它能使用熟悉的 npm 语法快速轻松地安装,并使用 JavaScript 来构建网络应用程序自动化和测试。
2Playwright 安装
python 版本
首先需要安装 python3.7 以上的版本, 已经安装可以查看版本,我安装的为 3.7.3 版本。

安装 playwright
命令:pip install playwright 
安装完查看是否安装成功以及版本
命令:python -m playwright -V

安装浏览器驱动文件(安装过程有一点慢耐心等待)
命令:python -m playwright install

录制
使用 Playwright 无需写一行代码,我们只需手动操作浏览器,它会录制我们的操作,然后自动生成代码脚本。
命令:python -m playwright codegen -h
其他选项:
-target 生成语言,有 python/javascript/python-async/csharp 可选,缺省值为 python
-o 保存路径,也可以写成--output
-b 指定浏览器,浏览器选项如下(缺省默认为 chromium):
cr 谷歌浏览器,或全称 chromium
-h 查看帮助,也可写成--help
3如何在 IDEA 中使用 Playwright
在 IDEA 创建一个 python 项目,然后在IDEA的终端输入命令进行录制。
命令:python -m playwright codegen --target python -o 'test.py' -b chromium https://www.baidu.com/
录入完成之后关闭浏览器,会在项目的目录下生成”test.py”文件
from playwright.sync_api import Playwright, sync_playwright
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
# Open new page
page = context.new_page()
# 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\"]", "鲸钱包")
# Click text=百度一下
# with page.expect_navigation(url="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E9%B2%B8%E9%92%B1%E5%8C%85&fenlei=256&rsv_pq=9845e77e0003c2fd&rsv_t=3b768IlUBkHniVTW5WPiihS4CAH%2F4tF1kc7n7YnCcfWSHJMIgGnZtJm1IkQ&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=19&rsv_sug1=7&rsv_sug7=100&rsv_btype=i&inputT=12365&rsv_sug4=14754&rsv_jmp=fail"):
with page.expect_navigation():
page.click("text=百度一下")
# Close page
page.close()
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
4playwright 还提供了异步和同步的 API 接口
异步
根据之前生成的代码和官网文档实现异步
from time import sleep
from playwright.sync_api import Playwright, sync_playwright
##异步操作浏览器
with sync_playwright() as playwright:
for browser_type in [playwright.chromium, playwright.firefox, playwright.webkit]:
browser = browser_type.launch(headless=False)
context = browser.new_context()
# Open new page
page = browser.new_page()
# 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\"]", "鲸钱包")
# Click text=百度一下
# with page.expect_navigation(url="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E9%B2%B8%E9%92%B1%E5%8C%85&fenlei=256&rsv_pq=9845e77e0003c2fd&rsv_t=3b768IlUBkHniVTW5WPiihS4CAH%2F4tF1kc7n7YnCcfWSHJMIgGnZtJm1IkQ&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=19&rsv_sug1=7&rsv_sug7=100&rsv_btype=i&inputT=12365&rsv_sug4=14754&rsv_jmp=fail"):
with page.expect_navigation():
page.click("text=百度一下")
sleep(5)
#截图保存
page.screenshot(path=f'example-{browser_type.name}.png')
# Close page
page.close()
# ---------------------
# ---------------------
context.close()
browser.close()
同步
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()
5playwright 支持移动端模拟
from playwright.sync_api import Playwright, sync_playwright
from time import sleep
##
with sync_playwright() as playwright:
iphone_11 = playwright.devices['iPhone 11 Pro']
browser = playwright.webkit.launch(headless=False)
context = browser.new_context(
**iphone_11,
locale='en-US',
geolocation={ 'longitude': 12.492507, 'latitude': 41.889938 },
permissions=['geolocation']
)
page = context.new_page()
page.goto('https://www.jingqb.com')
sleep(10)
page.screenshot(path='colosseum-iphone.png')
browser.close()
执行完成之后自动保存的图片 
6总结
Playwright 作为新一代自动化测试工具,相较于 Selenium 不论是易用性,还是实用性都得到了全方位的提升,做到了简约而不简单。当然 Playwright 也有缺点如 SSL 录制问题,移动设备只能模拟无法控制真机问题,还有待改善。对 Playwright 兴趣的朋友可以官网(https://playwright.dev/)查看更多资料。本次分享就这里。
- END -





