Playwright是由微软公司2020年初发布的新一代自动化测试工具,相较于目前最常用的Selenium,它仅用一个API即可自动执行Chromium、Firefox、WebKit等主流浏览器自动化操作,并同时支持以无头模式、有头模式运行。
官网地址:https://playwright.dev/docs/why-playwright/
1、Playwright使用
1.1 安装
快捷键Win+R,打开命令提示符窗口,输入以下命令行
(1) 安装 playwright-python 依赖库 (Playwright支持Async\Await语法,故需要Python3.7+)
pip install playwright
安装成功截图:
可以在https://pypi.org/project/playwright/查看它的依赖版本信息。
第 2 步,安装Chromium、Firefox、WebKit等浏览器的驱动文件(内置浏览器)
python -m playwright install
安装成功截图:
1.2 了解
使用Playwright无需写代码,只需手动操作浏览器,Playwright会录制我们的操作,然后自动生成代码脚本。
python -m playwright codegen 录制脚本
(1)命令行键入 --help 看到所有可后接选项
python -m playwright codegen --help
(2) 指令介绍
-o 生成自动化脚本的目录
--target 脚本语言,包含 JS 和 Python,分别对应值为:python 和 javascript
-b 指定浏览器驱动
1.3 录制
在baidu.com搜索,用chromium驱动,将结果保存为test.py的python文件
# 我们通过下面命令打开 Chrome 浏览器开始录制脚本
# 指定生成语言为:Python(默认Python,可选)
# 保存的文件名:test.py(可选)
# 浏览器驱动:chromium(默认webkit,可选)
# 最后跟着要打开的目标网站(默认仅仅是打开浏览器,可选)
python -m playwright codegen --target python -o test.py -b chromium https://www.baidu.com
命令行输入后会自动打开浏览器,然后可以看见在浏览器上的一举一动都会被自动翻译成代码,如下所示:
搜索“自动化测试”,点击Enter键,点击搜索出的“自动化测试-百度百科”,打开百度百科页面后,选择“自动化测试”标题,录制出如下脚本:
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()
# 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 Enter
page.press("input[name=\"wd\"]", "Enter")
# assert page.url == "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95&fenlei=256&rsv_pq=88dcbfd8000550eb&rsv_t=d783NUQ8df%2BNjkvSoOoFTFDteq6CMWv5vFl0hhLwCVm30D%2Bv2VS51wdwYiU&rqlang=cn&rsv_dl=tb&rsv_enter=1&rsv_sug3=16&rsv_sug1=14&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=8&rsv_sug4=5241"
# Click text=自动化测试 - 百度百科
with page.expect_popup() as popup_info:
page.click("text=自动化测试 - 百度百科")
page1 = popup_info.value
# assert page.url == "https://baike.baidu.com/item/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/9815698?fr=aladdin"
# Click h1:has-text("自动化测试")
page1.click("h1:has-text(\"自动化测试\")")
# Close page
page1.close()
# Close page
page.close()
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)