网站导航的展开与收缩怎么做的,营销型网站建设教学,网站栏目定位,vs2010c 做网站#x1f525; 交流讨论#xff1a;欢迎加入我们一起学习#xff01; #x1f525; 资源分享#xff1a;耗时200小时精选的「软件测试」资料包 #x1f525; 教程推荐#xff1a;火遍全网的《软件测试》教程 #x1f4e2;欢迎点赞 #x1f44d; 收藏 ⭐留言 #x1… 交流讨论欢迎加入我们一起学习 资源分享耗时200小时精选的「软件测试」资料包 教程推荐火遍全网的《软件测试》教程 欢迎点赞 收藏 ⭐留言 如有错误敬请指正 简介
Playwright是微软开源的一个UI自动化测试工具。添加了默认等待时间增加脚本稳定性并提供视频录制、网络请求支持、自定义的定位器、自带调试器等新特性。
Playwright的优势
playwright支持同步和异步两种使用方法
不需要为每个浏览器下载webdriver
支持无头浏览器且较为推荐headless默认值为True
可以使用传统定位方式CSSXPATH等也有自定义的新的定位方式如文字定位
没有使用selenium的先定位元素再进行操作的方式而是在操作方法中传入了元素定位定位和操作同时进行
已知局限性
1、旧版Edge和IE11支持。Playwright不支持旧版Microsoft Edge或IE11弃用通知。支持新的Microsoft Edge在Chromium上。
2、Java语言绑定Playwright API目前无法在Java或Ruby中使用。这是暂时的限制因为Playwright旨在支持任何语言的绑定。
3、在真实的移动设备上进行测试Playwright使用桌面浏览器来模拟移动设备。如果您有兴趣在实际的移动设备上运行请支持此问题。
安装
pip install playwright # 安装playwright的python版本
playwright install # 安装playwright自带的浏览器和ffmepg此步骤耗时较长 示例以百度为例输入百度网址打开百度页面搜索框中输入“playwright”点击“百度一下”按钮录制代码如下
from playwright.sync_api import sync_playwright # 导入playwright同步api def run(playwright): # 定义run方法browser playwright.chromium.launch(headlessFalse) # 创建chromium的browser对象当前使用的是playwright安装的自带的chromiumcontext browser.new_context() # 创建context对象context之间是相互隔离的可以理解为轻量级的浏览器实例page context.new_page() # 创建page对象真正打开浏览器界面page.goto(https://www.baidu.com/) # 跳转到百度urlpage.fill(input[name\wd\], playwright) # 通过css定位在搜索框中输入playwrightwith page.expect_navigation(): # 预期结果点击百度一下按钮后会发生页面导航page.click(text百度一下) # 通过playwright自定义的文字定位器定位百度一下按钮并点击# ---------------------context.close() # 关闭contextbrowser.close() # 关闭browserwith sync_playwright() as playwright: # playwright使用入口通过上下文方式run(playwright) # 调用run方法将playwright实例传入 基本概念
browser 浏览器支持多种浏览器Chromiumchrome、edge、Firefox、WebKitSafari一般每一种浏览器只需要创建一个browser实例。示例:
browser playwright.chromium.launch()
browser playwright.firefox.launch() context 上下文一个浏览器实例下可以有多个context将浏览器分割成不同的上下文以实现会话的分离如需要不同用户登录同一个网页不需要创建多个浏览器实例只需要创建多个context即可。
示例
context1 browser.new_context()
context2 browser.new_context() page
页面一个context下可以有多个page一个page就代表一个浏览器的标签页或弹出窗口用于进行页面操作。示例page context.new_page()# 显式导航类似于在浏览器中输入URL
page.goto(http://example.com)
# 在输入框中输入字符
page.fill(#search, query)# 点击提交按钮
page.click(#submit)
# 打印当前url
print(page.url) frame 一个页面至少包含一个主frame新的frame通过iframe标签定义frame之间可以进行嵌套只有先定位到frame才能对frame里面的元素进行定位和操作。playwright默认使用page进行的元素操作会重定向到主frame上。
示例
# 通过名称获得frame
frame page.frame(frame-login)# 通过frame的url获得frame
frame page.frame(urlr.*domain.*)# 通过选择器获得frame
frame_element_handle page.query_selector(.frame-class)
frame frame_element_handle.content_frame()# 操作frame中的元素
frame.fill(#username-input, John) 异步
异步操作可结合asyncio同时进行三个浏览器操作。
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(http://baidu.com/)
await page.screenshot(pathfexample-{browser_type.name}.png)
await browser.close()
asyncio.get_event_loop().run_until_complete(main()) 最后我邀请你进入我们的【软件测试学习交流群785128166】 大家可以一起探讨交流软件测试共同学习软件测试技术、面试等软件测试方方面面还会有免费直播课收获更多测试技巧我们一起进阶Python自动化测试/测试开发走向高薪之路 作为一个软件测试的过来人我想尽自己最大的努力帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源现在免费分享给大家有需要的小伙伴可以关注【公众号程序员二黑】自提