Playwright是由微软公司2020年初发布的新一代自动化测试工具,相较于目前最常用的Selenium,它仅用一个API即可自动执行chromium、Firefox、WebKit等主流浏览器自动化操作。作为针对 python 语言纯自动化的工具,在回归测试中可更快的实现自动化。
1. 为什么选择Playwright1.1 Playwright的优势(1) Selenium需要通过WebDriver操作浏览器;Playwright通过开发者工具与浏览器交互,安装简洁,不需要安装各种Driver。
(2) Playwright几乎支持所有语言,且不依赖于各种Driver,通过调用内置浏览器所以启动速度更快。
(3) Selenium基于HTTP协议(单向通讯),Playwright基于Websocket(双向通讯)可自动获取浏览器实际情况。
(4) Playwright为自动等待。
(1) Playwright不支持旧版Microsoft Edge或IE11。支持新的Microsoft Edge(在Chromium上);所以对浏览器版本有硬性要求的项目不适用。
(2) 需要SSL证书进行访问的网站可能无法录制,该过程需要单独定位编写。
(3) 移动端测试是通过桌面浏览器来模拟移动设备(相当于自带模拟器),无法控制真机。
2. Playwright使用2.1 安装(1)安装Playwright依赖库(Playwright支持Async\Await语法,故需要Python3.7 )
pipinstallplaywright
(2)安装Chromium、Firefox、WebKit等浏览器的驱动文件(内置浏览器)
python-mplaywrightinstall
2.2 自动录制
(1)命令行键入 --help 看到所有可后接选项
python-mplaywrightcodegen--help
(2)从起始页为xingzheai.cn开始录制
python-mplaywrightcodegenhttps://xingzheai.cn/
(3)打开xingzheai.cn,用Chromium驱动,将结果保存为my.py的python文件
python-mplaywrightcodegen--targetpython-o'my.py'-bchromiumhttps://xingzheai.cn/
(1)元素定位
By的8种定位方式,实际为4种
W3C标准规定的webDriver协议为5种定位方式
Playwright将选择器汇总为3种
(2)选择器规则
(3)元素常用操作
page=context.newPage()
defWhether_intercept()->bool:
returnTrue#进行拦截
#returnFalse#不进行拦截
defhandler(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 同步执行,示例如下:
#依次打开三个浏览器,前往行者官网,截图后退出。
fromplaywrightimportsync_playwrightwithsync_playwright()asp:
forbrowser_typein[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 异步执行,示例如下:
#同时进行三个浏览器操作
importasyncio
fromplaywrightimportasync_playwright
asyncdefmain():
asyncwithasync_playwright()asp:
forbrowser_typein[p.chromium,p.firefox,p.webkit]:
browser=awaitbrowser_type.launch()
page=awaitbrowser.newPage()
awaitpage.goto('https://xingzheai.cn/')
awaitpage.waitForSelector("text=智能内容审核")
awaitpage.screenshot(path=f'example-{browser_type.name}.png')
awaitbrowser.close()
asyncio.get_event_loop().run_until_complete(main())
2.7 Pytest结合,示例如下:
安装:pip install pytest-playwright
deftest_playwright(page):
page.goto("https://xingzheai.cn/")
withpage.expect_popup()aspopup_info:
page.click('text="智能内容审核"')
assert"智能内容审核"==element.textContent()
2.8 移动端操作,示例如下:
目前支持模拟机型较少, 参照:仿真设备列表
fromtimeimportsleep
fromplaywrightimportsync_playwright
withsync_playwright()asp:
GalaxyS5=p.devices['GalaxyS5']
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不论是易用性,还是实用性都得到了全方位的提升。做到了简约而不简单,相信使用该工具可以帮助我们提升做自动化的工作效率。
PS:
我们是行者AI,我们在“AI+游戏”中不断前行。
快来【公众号 | xingzhe_ai】,和我们讨论更多技术问题吧!
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved