Playwright快速上手指南(入门教程)
作者:行者AI 发布时间:2022-09-25 02:44:23
目录
1. 为什么选择Playwright
1.1 Playwright的优势
1.2 已知局限性
2. Playwright使用
2.1 安装
2.2 自动录制
2.3 定制化编写
2.4 网络拦截(Mock接口),示例如下:
2.6 异步执行,示例如下:
2.7 Pytest结合,示例如下:
2.8 移动端操作,示例如下:
3. 总结
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不论是易用性,还是实用性都得到了全方位的提升。做到了简约而不简单,相信使用该工具可以帮助我们提升做自动化的工作效率。
来源:https://blog.csdn.net/suiyuejian/article/details/113541451
猜你喜欢
- 当今互联网时代,数据处理已经成为了一个非常重要的任务。而Redis作为一款高性能的NoSQL数据库,越来越受到了广大开发者的喜爱。本篇博客将
- 在进行数据操作时,经常会根据条件批量的修改数据,如以下数据,按照日期的条件,将部门日期下的promotion改为1tot_qtypriced
- context 有什么作用context 主要用来在goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等。
- 单张人脸关键点检测定义可视化图像函数导入三维人脸关键点检测模型导入可视化函数和可视化样式读取图像将图像模型输入,获取预测结果BGR转RGB将
- 最近在重新看vue3的rfcs,发现一个细节,原话如下:props that start with on are handled as v-
- CSS选择器目前,除了官方文档之外,市面上及网络详细介绍BeautifulSoup使用的技术书籍和博客软文并不多,而在这仅有的资料中介绍CS
- 八卦为先八卦是种优良品质,特别是用在技术上时。来看几个Reset CSS的八卦问题吧:你知道世界上第一份reset.css在哪么?* { m
- 如下所示:# -*- coding: utf-8 -*-import osimport numpy as npimport pandas a
- 这篇文章主要介绍了Python箱型图绘制与特征值获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 秒杀活动可以说在互联网上随处可见,从12306抢票,到聚划算抢购,我们生活的方方面面都可以看到秒杀的身影。秒杀的架构设计也是对于一个架构师架
- 一、备份数据库 1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server
- 一. 静态资源static文件放在app中确认django.contrib.staticfiles包含在INSTALLED_APPS中。在s
- 本文实例讲述了Python框架Flask的基本数据库操作方法。分享给大家供大家参考,具体如下:数据库操作在web开发中扮演着一个很重要的角色
- 简单的LSTM问题,能够预测一句话的下一个字词是什么固定长度的句子,一个句子有3个词。使用one-hot编码各种引用import keras
- 本次分析基于 CPython 解释器,python3.x版本在python2时代,整型有 int 类型和 long 长整型,长整型不存在溢出
- asp vbs Cache缓存类属性valid,是否可用,取值前判断属性name,cache名,新建对象后赋值方法add(值,到期时间),设
- 对衍射最经典的解释是Huygens-Fresnel原理,Huygens认为波阵面上每一点都会成为新的波源,这些子波源的相互干涉就形成了衍射。
- Python类基本写法与注释风格python是一种面向对象的语言,利用类的抽象可以大大提高代码的复用和结构,减少重复造轮子的过程,也让代码变
- 一、安装库首先我们需要安装PIL和pytesseract库。PIL:(Python Imaging Library)是Python平台上的图
- 当系统出现故障时,只要存在数据日志那么就可以利用它来恢复数据解决数据库故障。作为SQL Server数据库管理员,了解数据日志文件的作用,以