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开始录制
python -m playwright codegen xingzheai/
(3)打开xingzheai,⽤Chromium驱动,将结果保存为my.py的python⽂件
python -m playwright codegen --target python -o 'my.py' -b chromium xingzheai/
-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 = wPage()
def Whether_intercept() -> bool:
return True  #进⾏拦截
# return False #不进⾏拦截
def handler(route:Route):
quest.url)
#正常访问
# inue_()
#拒绝访问
# route.abort("⽹络拦截")
# 重定向到⾮⽬标地址
route.fulfill(
status=302,
headers={
'Location' : "xingzheai/"
}
)
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 = wPage()
<('xingzheai/')
# 等待页⾯加载完全后截图
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 = wPage()
('xingzheai/')
await page.waitForSelector("text=智能内容审核")
await page.screenshot(path=f'example-{browser_type.name}.png')
await browser.close()
<_event_loop().run_until_complete(main())
2.7 Pytest结合,⽰例如下:
安装:pip install pytest-playwright
def test_playwright(page):
<("xingzheai/")
pect_popup() as popup_info:
正则化匹配26个字母pythonpage.click('text="智能内容审核"')
assert "智能内容审核" == Content()
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 = wContext(**GalaxyS5)
page = wPage()
<('xingzheai/')
page.click('text="智能内容审核"')
# 截图
# page.screenshot(path='colosseum-GalaxyS5.png')
sleep(10)
browser.close()
3. 总结
Playwright作为新⼀代⾃动化测试⼯具,相较于Selenium不论是易⽤性,还是实⽤性都得到了全⽅位的提升。做到了简约⽽不简单,相信使⽤该⼯具可以帮助我们提升做⾃动化的⼯作效率。
PS:更多技术⼲货,快关注【 | xingzhe_ai】,与⾏者⼀起讨论吧!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。