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  def handler(route:Route):print(route.request.url)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]: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="智能内容审核"')sleep(10)browser.close()

3. 总结

Playwright作为新一代自动化测试工具,相较于Selenium不论是易用性,还是实用性都得到了全方位的提升。做到了简约而不简单,相信使用该工具可以帮助我们提升做自动化的工作效率。


转载https://blog.csdn.net/suiyuejian/article/details/113541451

微软自动化测试工具Playwright快速上手指南相关推荐

  1. 「自动化测试」新一代 Web 前端自动化测试框架 —— playwright 快速上手,轻松带入项目

    playwright上手 内网如何安装项目依赖 注意:想运行 playwright需要下载相关浏览器的二进制文件 由于默认情况下,Playwright 会从 Microsoft CDN 下载浏览器二进 ...

  2. 分布式作业 Elastic-Job 快速上手指南

    转载自 分布式作业 Elastic-Job 快速上手指南 Elastic-Job支持 JAVA API 和 Spring 配置两种方式配置任务,这里我们使用 JAVA API 的形式来创建一个简单的任 ...

  3. 最新课程 | openGauss 快速上手指南课程即将开课

    点击蓝字|关注我们 2020 年 7 月 1 日,openGauss 数据库源代码正式开放,并成立了 openGauss 开源社区.恩墨学院与 openGauss 开源社区达成合作,为了推动社区技术生 ...

  4. 1-5分钟上手自动化测试——Airtest+Poco快速上手

    1 | 5分钟上手自动化测试--Airtest+Poco快速上手 1.1 前言 本文档将演示如何使用Airtest Project专用的编辑器AirtestIDE,编写Airtest+Poco自动化脚 ...

  5. HTAP 快速上手指南

    本指南介绍如何快速上手体验 TiDB 的一站式混合型在线事务与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 功能. 注意 ...

  6. Wwise 快速上手指南: 程序员篇(v2016.1)

    Wwise 快速上手指南: 程序员篇(v2016.1) https://gameinstitute.qq.com/community/detail/107700 Wwise 快速上手指南: 程序员篇 ...

  7. Eclipse快速上手指南

    本指南介绍到的软件可能已经有更新,希望大家不要局限于本文中的版本号 Eclipse是一款非常优秀的开源IDE,非常适合Java开发,由于支持插件技术,受到了越来越多的开发者的欢迎.最新的Eclipse ...

  8. TortoiseGit + GitHub 快速上手指南

    TortoiseGit + GitHub 快速上手指南 名词解释: 1. TortoiseGit 是 TortoiseSVN的Git版,它很好的实现了与windows资源管理器的融合,使用界面与Tor ...

  9. raptor累乘流程图_Markdown快速上手指南

    Markdown快速上手指南 1.Markdown介绍 markdown可以实现快速html文档编辑,格式优没,并且不需要使用html元素. markdown采用普通文本的形式,例如读书笔记等易于使用 ...

  10. NexentaStor iSCSI/ NAS 存储服务器软件图解教程(3)——NMV快速上手指南Part2

    NexentaStoriSCSI/NAS 存储服务器软件图解教程(3) Nexenta Management View (NMV)/*NexentaStor Web 管理界面*/快速上手指南Part ...

最新文章

  1. B - 娜娜梦游仙境系列——跳远女王
  2. “A and B ...”,谓语动词必以复数形式呈现?
  3. linux 命令读db文件格式,使用linux的db_load命令生成db数据库
  4. php行列,【后端开辟】php 怎样完成行列
  5. 什么是ACID理论(二阶段、三阶段提交、TCC)
  6. Python基础班---第一部分(基础)---Python基础知识---第一个Python程序
  7. 春招已近,这份GitHub万星的ML算法面试大全请收下
  8. 【JAVA 第三章 流程控制语句】课后习题 计算两个日期之间的天数
  9. nginx学习笔记之安装
  10. Java web--过滤器
  11. hex对ARP和IP、ICMP数据包的分析
  12. 等价类划分法测试用例
  13. ajax请求数据 ztree_ztree通过ajax获取json并勾选checkbook
  14. 判断虚拟键盘是删除键的方法
  15. M: Triangular Relationship (数论)
  16. 测试用例-----听歌项目
  17. 心理测评软件php mysql_心理测评系统
  18. 永磁同步电机矢量控制中的双闭环是什么意思_【百问百答】ST 电机控制实战问答合辑 | 连载之二...
  19. 我的大学——学习生活总结
  20. JavaFx - 按下Button 一直触发按钮事件

热门文章

  1. 用python股票_十分钟学会用Python交易股票
  2. 让 Chrome 在后台运行
  3. 软考中级软件设计师笔记第二章计算机操作系统
  4. ARM开发6.3.4 基础实训( 4 ) 两个 LED 显示二位数(动态显示)--LPC21XX
  5. mfc窗口右下角如何显示一个三角形图案_以C4D制作金属碳笼为例:安利一个友好的三维制图软件...
  6. linux下好用的截图工具,Linux系统下一款比较易用的截图工具
  7. javascript 数组操作函数
  8. css如何设置div中的内容垂直居中?
  9. Redis 集群(学习笔记十)
  10. Java SVN管理工具的使用