Playwright快速上手指南(入门教程)
playwright是由微软公司2020年初发布的新一代自动化测试工具,相较于目前最常用的selenium,它仅用一个api即可自动执行chromium、firefox、webkit等主流浏览器自动化操作。作为针对 python 语言纯自动化的工具,在回归测试中可更快的实现自动化。
1. 为什么选择playwright
1.1 playwright的优势
(1) selenium需要通过webdriver操作浏览器;playwright通过开发者工具与浏览器交互,安装简洁,不需要安装各种driver。
(2) playwright几乎支持所有语言,且不依赖于各种driver,通过调用内置浏览器所以启动速度更快。
(3) selenium基于http协议(单向通讯),playwright基于websocket(双向通讯)可自动获取浏览器实际情况。
(4) playwright为自动等待。
- 等待元素出现(定位元素时,自动等待30s,等待时间可以自定义,单位毫秒)
- 等待事件发生
1.2 已知局限性
(1) playwright不支持旧版microsoft edge或ie11。支持新的microsoft edge(在chromium上);所以对浏览器版本有硬性要求的项目不适用。
(2) 需要ssl证书进行访问的网站可能无法录制,该过程需要单独定位编写。
(3) 移动端测试是通过桌面浏览器来模拟移动设备(相当于自带模拟器),无法控制真机。
2. playwright使用
2.1 安装
(1)安装playwright依赖库(playwright支持async\await语法,故需要python3.7+)
pip install playwright
(2)安装chromium、firefox、webkit等浏览器的驱动文件(内置浏览器)
python -m playwright install
2.2 自动录制
(1)命令行键入 --help 看到所有可后接选项
python -m playwright codegen --help
(2)从起始页为xingzheai.cn开始录制
python -m playwright codegen https://xingzheai.cn/
(3)打开xingzheai.cn,用chromium驱动,将结果保存为my.py的python文件
python -m playwright codegen --target python -o 'my.py' -b chromium https://xingzheai.cn/
-target:规定生成脚本的语言,有js和python两种,默认为python
-b:指定浏览器驱动
-o:将录制的脚本保存到一个文件
2.3 定制化编写
(1)元素定位
- 选择单个元素:queryselector(engine=body)
- 选择多个元素:queryselectorall(engine=body)
- 选择单个元素,并且自动等待:waitforselector(engine=body)
by的8种定位方式,实际为4种
- id、name、tag name、class name(java和pythona将该4种都归为css)
- xpath、link text、partial link text、css selector
w3c标准规定的webdriver协议为5种定位方式
- css、link text、partial link text、tag name、xpath
playwright将选择器汇总为3种
- css、xpath(支持逻辑表达式和函数)、text
(2)选择器规则
- css: id选择器、类选择器、元素选择器、属性选择器、通配选择器、层次选择器。
- xpath: xml路径语言,通过“路径标识符”,导航xml文档的,在类xml种(html)也可以使用。
- text: 结构化内容(html,xml,json)使用模糊匹配(忽略大小写,忽略前后空格,搜索子字符串)及精确匹配、非结构化内容使用正则匹配。
(3)元素常用操作
- 下拉选择框:selectopion、value、labei、index
- 文件上传:setinputfiles、单个文件、多个文件、拖放上传
- 鼠标点击:click、dbclick
- 鼠标拖动:down、up
- 鼠标移动:move
- 触摸屏幕:tag
- 键盘按键:press
- 截屏、录屏:screenshot、recordvideo
2.4 网络拦截(mock接口),示例如下:
page = context.newpage() def whether_intercept() -> bool: return true #进行拦截 # return false #不进行拦截 def handler(route:route): print(route.request.url) #正常访问 # route.continue_() #拒绝访问 # route.abort("网络拦截") # 重定向到非目标地址 route.fulfill( status=302, headers={ 'location' : "https://xingzheai.cn/" } ) page.route(whether_intercept,handler)
2.5 同步执行,示例如下:
#依次打开三个浏览器,前往行者官网,截图后退出。 from playwright import sync_playwright with sync_playwright() as p: for browser_type in [p.chromium, p.firefox, p.webkit]: # 指定为有头模式,ture为无头模式 browser = browser_type.launch(headless=false) page = browser.newpage() page.goto('https://xingzheai.cn/') # 等待页面加载完全后截图 page.waitforselector("text=智能内容审核") page.screenshot(path=f'example-{browser_type.name}.png') browser.close()
2.6 异步执行,示例如下:
#同时进行三个浏览器操作 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://xingzheai.cn/') await page.waitforselector("text=智能内容审核") await page.screenshot(path=f'example-{browser_type.name}.png') await browser.close() asyncio.get_event_loop().run_until_complete(main())
2.7 pytest结合,示例如下:
安装:pip install pytest-playwright
def test_playwright(page): page.goto("https://xingzheai.cn/") with page.expect_popup() as popup_info: page.click('text="智能内容审核"') assert "智能内容审核" == element.textcontent()
2.8 移动端操作,示例如下:
目前支持模拟机型较少, 参照:仿真设备列表
from time import sleep from playwright import sync_playwright with sync_playwright() as p: galaxys5 = p.devices['galaxy s5'] browser = p.chromium.launch(headless=false) context = browser.newcontext(**galaxys5) page = context.newpage() page.goto('https://xingzheai.cn/') page.click('text="智能内容审核"') # 截图 # page.screenshot(path='colosseum-galaxys5.png') sleep(10) browser.close()
3. 总结
playwright作为新一代自动化测试工具,相较于selenium不论是易用性,还是实用性都得到了全方位的提升。做到了简约而不简单,相信使用该工具可以帮助我们提升做自动化的工作效率。
到此这篇关于playwright快速上手指南(入门教程)的文章就介绍到这了,更多相关playwright入门内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!