UI自动化测试框架playwright--初级入门

news2025/1/12 8:58:19

 一、背景:UI自动化的痛点:

1、设计脚本耗时:

需要思考要如何模拟用户的操作,如何触发页面的事件,还要思考如何设计脚本,定位和操作要交互的元素、路径、位置,再编写代码逻辑,往复循环数次,要不停在浏览器和代码编辑器中进行切换。

2、调试脚本耗时:

初步完成元素定位和操作的脚本后,还要一 一进行测试验证程序运行是否符合预期,要反复进行调试。

3、维护成本较高:

面向用户的界面的迭代变化频率较高,基于界面元素构建的测试脚本也要跟着变,那么我们面临的就是不停的更新维护既有的UI自动化脚本

思考:如何可以不用考虑定位元素、不用手写代码、并且降低维护成本地完成UI自动化流程?

二、简介与安装

1、介绍-特点

Playwright是一个由微软开发的自动化测试框架,通过“录制为主,编写为辅”的方式来完成测试脚本。

1)playwright的优点

1)支持所有主流浏览器
•支持所有主流浏览器:基于Chromium内核的Chrome 和 Edge浏览器, WebKit内核的Safari 和 Firefox浏览器。
•支持跨平台:Windows、Linux 和macOS
•可用于模拟移动端WEB应用的测试,不支持在真机上测试。
•支持无头模式(默认)和有头模式

2)快速可靠的执行
•自动等待元素(默认30s)
•Playwright基于Websocket协议,可以接受浏览器(服务端)的信号,也可在后台服务器完成。selenium采用的是HTTP协议,只能客户端发起请求。
•浏览器上下文并行:单个浏览器实例下创建多个浏览器上下文,每个浏览器上下文可以处理多个页面。
•有弹性的元素选择:可以使用文本、可访问标签选择元素。

3)强大的自动化能力
•playwright不受页面内JavaScript执行范围的限制,可以自动化控制多个页面。
•自动生成测试代码:Playwright提供了一个CLI工具,可以记录用户在浏览器中的操作,并生成相应的测试代码。
•强大的网络控制:Playwright 引入了上下文范围的网络拦截来存根和模拟网络请求。
•现代web特性:支持Shadow DOM选择,元素位置定位,页面提示处理,Web Worker等Web API。
•覆盖所有场景:支持文件下载、上传、输入、点击,暗黑模式等。
•支持主流编程语言:python、Java、Node.js、C#、.Net等

2)playwright的局限性

1) Playwright不支持旧版Microsoft Edge或IE11。所以对浏览器版本有硬性要求的项目不适用。

2) 需要SSL证书进行访问的网站可能无法录制,该过程需要单独定位编写。

3) 移动端测试是通过桌面浏览器来模拟移动设备,无法控制真机。

4) Playwright的社区规模相对较小,可能会导致在解决问题时的资源有限

3)与传统的selenium对比

2、安装playwright

建议使用镜像,不然比较慢

pip install playwright -i https://pypi.tuna.tsinghua.edu.cn/simple

安装成功

3、安装浏览器环境

此命令会一次性安装Chromium, Firefox 和 WebKit 内置浏览器,playwright就是通过这些浏览器操作web应用

playwright install

三、UI脚本录制:

1、录制脚本

在控制台,通过codegen命令,使用playwright进行脚本录制

#默认使用Chromium
playwright codegen URL


#指定浏览器:
playwright codegen -- browser firefox URL


#录制脚本自动保存到本地
playwright codegen -o D:\demo.py -b chromium URL
-o 生成自动化脚本的目录(默认地址为cmd运行命令的地址)
-b 指定浏览器驱动  

示例:

2、录制浏览器操作-自动生成脚本

playwright codegen https://www.baidu.com/

3、生成的脚本语言种类

支持自动生成:python、Java、Node.js、C#、.Net等编程语言

四、UI自动化结合接口自动化使用

通过调用提供出的接口,可以做UI自动化的前置或者后置的 造数、清数、设置mock,以及调用各业务线维护的P0级用例等等均可

1、接口的token

2、示例

使用 Playwright 框架模拟了一个 POST 请求,完成接口的调用,在发起放款流程前,清除在途贷款单。

plywright本身也可以应用在接口自动化

五、UI自动化断言

page = browser.new_page(timeout=60000)  # 设置 timeout 为 60 秒
page.goto("https://example.com", wait_until="networkidle")  # 使用 waitUntil将等待网络请求停止后再继续执行

1、自动断言

playwright本身支持自动生成对元素的基本断言代码,例如:元素是否可见、元素的文本是否匹配、元素的属性值是否一致、元素的快照等

2、常用的用于断言方法

对页面文本断言、对元素断言 ,对URL断言

    # 断言页面标题
    expect(page).to_have_title("Example Domain")

    # 断言 h1 文本内容
    expect(page.locator('h1')).to_have_text('Example Domain')

    # 断言元素可见
    expect(page.locator('text="More information..."')).to_be_visible()

    # 断言元素不可见
    # 假设页面上有一个隐藏的元素,ID为hidden-element
    # expect(page.locator('#hidden-element')).not_to_be_visible()

    # 断言元素属性
    # 假设页面上有一个按钮,ID为submit-button,其属性为disabled
    # expect(page.locator('#submit-button')).to_have_attribute('disabled', 'true')

    # 断言元素数量
    # 假设页面上有三个div元素,类名为item
    # expect(page.locator('div.item')).to_have_count(3)

    # 断言 URL
    expect(page).to_have_url('https://example.com')

    # 断言输入框的值
    # 假设页面上有一个输入框,名称为username,其值为testuser
    # expect(page.locator('input[name="username"]')).to_have_value('testuser')

    # 断言元素的 CSS 属性
    # 假设页面上有一个按钮,其背景颜色为rgb(0, 123, 255)
    # expect(page.locator('button')).to_have_css('background-color', 'rgb(0, 123, 255)')

    # 断言元素可编辑
    # 假设页面上有一个输入框
    # expect(page.locator('input')).to_be_editable()

    # 断言复选框已选中
    # 假设页面上有一个复选框
    # expect(page.locator('input[type="checkbox"]')).to_be_checked()

六、截图比对

可以对页面、元素等,进行截图并比对

1、图像比对方法:

本次介绍的图片比对方法:ImageChops.difference()

需要引入pillow库,pip install pillow

原理:将图像数据转换为 Image 对象,然后使用像素值进行比较

1)图像对齐:首先,该方法会对齐两幅图像的大小和位置。如果两幅图像的大小不同,较小的图像会被扩展到与较大图像相同的大小。如果它们的位置不同,difference() 会尝试将它们对齐到相同的位置。

2)像素值比较:然后,对于每个对应的像素点,该方法会计算它们的RGB值之间的差异。也就是计算每个通道(红、绿、蓝)中像素值的绝对差异,并将这些差异值合并成一个新的像素值。

3)差异图像生成:最后,该方会创建一个新的图像:差异图像,其中每个像素的值表示了原始图像中对应像素的差异程度。差异图像通常显示为黑白图像,白色表示两个图像在该位置完全不同,黑色表示它们完全相同。

图像比对方法介绍:

选择哪种方法取决于你的具体需求和图像特性。

如果需要非常精确的对比,像素级对比可能是最好的选择;

如果你希望对比结果更符合人类视觉感知,SSIM 或 EMD 可能更合适。

1)Pillow (PIL):提供了基本的图像处理功能,包括像素级对比。
2)imagehash:实现了 Perceptual Hashing 算法。
3)scikit-image:提供了 SSIM 和其他图像相似性度量的计算函数。
4)pyemd:实现了 Earth Mover's Distance 算法。
5)TensorFlow 或 PyTorch:可以使用这些深度学习框架来构建和训练自己的图像对比模型。

2、截取某个元素

#定位元素
element = page.get_by_role("button", name="立即登录")

# 对元素进行截图
screenshot = element.screenshot()

3、截取页面

#打开页面
page.goto('https://www.baidu.com/')

#截取页面
page.screenshot(path='page.png')

4、比对方式

1)本地图片与测试流程中图片比对:

  #在URL页面中截图page1
    page.goto("URL1")
    page.screenshot(path='page1.png')
    image1 = Image.open('page1.png')
    
    #在本地通过绝对路径获取图片2
    image2 = Image.open('local path')
    
    diff = ImageChops.difference(image1, image2)
   
    if diff.getbbox():
        print("The two pages are different.")
    else:
        print("The two pages are same.")

2)测试流程中图片比对:

    page.goto("URL1")
    page.screenshot(path='page1.png')

    page.goto("URL2")
    page.screenshot(path='page2.png')
    
    image1 = Image.open('page1.png')
    image2 = Image.open('page2.png')

    diff = ImageChops.difference(image1, image2)
    
    if diff.getbbox():
        print("The two pages are different.")
    else:
        print("The two pages are same.")

七、模拟移动端

1、说明

playwright支持模拟特定设备的浏览器行为,例如用户代理、屏幕尺寸、视口以及是否启用了触摸。所有测试都将使用指定的设备参数运行。

2、示例:

通过配置UA结合device模拟移动端,小贷日常用于移动端测试、用户鉴权等场景

browser = playwright.chromium.launch(headless=False)
# browser2 = playwright.chromium.launch(channel='chrome', args=['--device', 'iPhone 15 Pro Max'])
    mobile_context = browser.new_context(

        user_agent="Mozilla/5.0 (iPhone; CPU iPhone OS 16_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/application=JDJR-App&clientType=ios&iosType=iphone&clientVersion=6.8.70&HiClVersion=6.8.60&isUpdate=0&osVersion=16.6.1&osName=iOS&screen=932*430&src=App Store&netWork=2&netWorkType=5&CpayJS=UnionPay/1.0 JDJR&stockSDK=stocksdk-iphone_4.2.3&sPoint=&jdPay=(*#@jdPaySDK*#@jdPayChannel=jdfinance&jdPayChannelVersion=6.8.60&jdPaySdkVersion=4.01.17.00&jdPayClientName=iOS*#@jdPaySDK*#@)",
        viewport={'width': 400, 'height': 700}
    )
    page2 = mobile_context.new_page()

八、可视化测试报告输出

1、allure下载与安装

allure下载地址:Central Repository: io/qameta/allure/allure-commandline

需要配置环境变量

一切安装好之后,在cmd里面查看安装的版本号

allure --version

2、安装依赖

pip install -i https://pypi.douban.com/simple allure-pytest
npm install -g allure-playwright@2.13.5

3、应用

用例文件里分层标识信息

标题:
@allure.title("用例标题")

步骤:
with allure.step("执行步骤"):

描述:
def test_function():
    '''描述'''

main文件里使用

# 获得测试结果,并以allure的数据格式保留下来
1)pytest.main(["--alluredir", "allure_result", "--clean-alluredir","test_loan_pc_old.py"])

•["--alluredir", "allure_result"] 表示将测试结果保存在 allure_result 文件夹中,用于后续生成报告。
•["--clean-alluredir"] 表示在运行测试之前,清空 allure_result 文件夹中的内容,避免与上一次测试的结果混淆。
•["test_loan_pc_old.py"] 指定要运行的测试用例文件名。



# 通过allure的数据,进行报告的生成
2)allure generate --clean ./allure_result -o ./allure_report
根据 allure_result 的数据生成测试报告,并将报告保存在 allure_report 文件夹中
--clean 选项表示在生成报告之前清空 allure_result 文件夹中的内容。

4、运行结果

自动化脚本里面,对断言失败和用例执行情况进行可视化输出

1)一成功,一失败

对断言失败和用例执行情况进行可视化输出

2)用例执行均成功

九、PO模式 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2275416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开放词汇检测新晋SOTA:地瓜机器人开源DOSOD实时检测算法

在计算机视觉领域,目标检测是一项关键技术,旨在识别图像或视频中感兴趣物体的位置与类别。传统的闭集检测长期占据主导地位,但近年来,开放词汇检测(Open-Vocabulary Object Detection-OVOD 或者 Open-Set Object Detec…

Jupyter Notebook 安装PyTorch

1、判断当前环境 通过如下命令可以看出是Anaconda 环境 2、Anaconda 环境安装 PyTorch 2.1 要执行的命令 如果你使用的是 Anaconda 环境,可以使用以下命令来安装 PyTorch: conda install pytorch -c pytorch 2.2 执行遇到的问题:没有权…

如何将json字符串格式化

文章目录 如何对json字符串进行格式化显示hutool方案的示例和不足使用fastjson的方案 如何对json字符串进行格式化显示 将json字符串内容进行格式化的输出显示。本文介绍 hutool的方案和alibaba 的fastjson方案 hutool方案的示例和不足 引入依赖 <dependency><grou…

C#使用OpenTK绘制3D可拖动旋转图形三棱锥

接上篇,绘制着色矩形 C#使用OpenTK绘制一个着色矩形-CSDN博客 上一篇安装OpenTK.GLControl后,这里可以直接拖动控件GLControl 我们会发现GLControl继承于UserControl //// 摘要:// OpenGL-aware WinForms control. The WinForms designer will always call the default//…

【Git原理和使用】Git 分支管理(创建、切换、合并、删除、bug分支)

一、理解分支 我们可以把分支理解为一个分身&#xff0c;这个分身是与我们的主身是相互独立的&#xff0c;比如我们的主身在这个月学C&#xff0c;而分身在这个月学java&#xff0c;在一个月以后我们让分身与主身融合&#xff0c;这样主身在一个月内既学会了C&#xff0c;也学…

概率图模型01

机器学习中&#xff0c;线性回归、树、集成和概率图都属于典型的统计学习方法&#xff0c;概率图模型会更深入地体现出‘统计’两字 概率图模型的常见算法 概率图模型中的图 概率图模型如图主要分为两种&#xff0c;即贝叶斯网络和马尔可夫网络&#xff0c;有向图与无向图&…

解决WordPress出现Fatal error: Uncaught TypeError: ftp_nlist()致命问题

错误背景 WordPress版本&#xff1a;wordpress-6.6.2-zh_CN WooCommerce版本&#xff1a;woocommerce.9.5.1 WordPress在安装了WooCommerce插件后&#xff0c;安装的过程中没有问题&#xff0c;在安装完成后提示&#xff1a; 此站点遇到了致命错误&#xff0c;请查看您站点管理…

《HeadFirst设计模式》笔记(下)

11 代理模式 代理要做的就是控制和管理访问。 你的客户对象所做的就像是在做远程方法调用&#xff0c;但其实只是调用本地堆中的“代理”对象上的方法&#xff0c;再由代理处理所有网络通信的低层细节。 Java的RMI提供了客户辅助对象和服务辅助对象&#xff0c;为客户辅助对…

【Uniapp-Vue3】v-if条件渲染及v-show的选择对比

如果我们想让元素根据响应式变量的值进行显示或隐藏可以使用v-if或v-show 一、v-show 另一种控制显示的方法就是使用v-show&#xff0c;使用方法和v-if一样&#xff0c;为true显示&#xff0c;为false则不显示。 二、v-if v-if除了可以像v-show一样单独使用外&#xff0c;还…

【MySQL数据库】基础总结

目录 前言 一、概述 二、 SQL 1. SQL通用语法 2. SQL分类 3. DDL 3.1 数据库操作 3.2 表操作 4. DML 5. DQL 5.1 基础查询 5.2 条件查询 5.3 聚合函数 5.4 分组查询 5.5 排序查询 5.6 分页查询 6. DCL 6.1 管理用户 6.2 权限控制 三、数据类型 1. 数值类…

ubuntu/kali安装c-jwt-cracker

1.下载安装包 可以去GitHub下载解压&#xff0c;我这直接在kali克隆下来了。&#xff08;网络不好可能克隆不下来&#xff09; git clone https://github.com/brendan-rius/c-jwt-cracker.git 2.如果下载的压缩包就需要进行解压&#xff0c;克隆的直接进入目录就好了。 unzi…

H266/VVC 帧内预测中 ISP 技术

帧内子划分 ISP ISP 技术是在 JVET-2002-v3 提案中详细介绍其原理&#xff0c;在 VTM8 中完整展示算法。ISP是线基内预测&#xff08;LIP&#xff09;模式的更新版本&#xff0c;它改善了原始方法在编码增益和复杂度之间的权衡&#xff0c;ISP 算法的核心原理就是利用较近的像…

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二)

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《…

【2024年华为OD机试】 (A卷,100分)- 对称美学(Java JS PythonC/C++)

一、问题描述 题目描述 对称就是最大的美学&#xff0c;现有一道关于对称字符串的美学。已知&#xff1a; 第1个字符串&#xff1a;R第2个字符串&#xff1a;BR第3个字符串&#xff1a;RBBR第4个字符串&#xff1a;BRRBRBBR第5个字符串&#xff1a;RBBRBRRBBRRBRBBR 相信你…

c#集成npoi根据excel模板导出excel

NuGet中安装npoi 创建excel模板&#xff0c;替换其中的内容生成新的excel文件。 例子中主要写了这四种情况&#xff1a; 1、替换单个单元格内容&#xff1b; 2、替换横向多个单元格&#xff1b; 3、替换表格&#xff1b; 4、单元格中插入图片&#xff1b; using System.IO; …

【数据库系统概论】第5章 数据库完整性【!触发器】

目录 5.1数据库完整性概述 5.2 实体完整性 5.3 参照完整性 5.4 用户定义的完整性 属性上的约束 1. 列值非空&#xff08;NOT NULL&#xff09; 2. 列值唯一&#xff08;UNIQUE&#xff09; 3. 检查列值是否满足条件&#xff08;CHECK&#xff09; 元组上的约束 5.5 完…

一键部署Netdata系统无需公网IP轻松实现本地服务器的可视化监控

文章目录 前言1.关于Netdata2.本地部署Netdata3.使用Netdata4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Netdata公网地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…

HBuilderX(uniapp)实现微信小程序获取用户头像、昵称、授权登录、获取用户手机号

前言&#xff1a;微信文档写的零零散散的&#xff0c;网上搜的教程&#xff0c;23年的教程还在教22年改版之前的东西&#xff0c;导致踩坑无数&#xff0c;所以自己写一下文档记录一下&#xff0c;帮助后来者&#xff0c;记录于2024.11.14 一.获取用户头像和昵称 首先阅读微信…

RabbitMQ基础(简单易懂)

什么是RabbitMQ&#xff1f; 它基于AMQP协议&#xff08;Advanced Message Queuing Protocol&#xff09;&#xff0c;一种为应用构建消息队列的标准协议。过程中&#xff0c;它提供了一些重要模块&#xff1a;为消息发送的Producer&#xff08;生产者&#xff09;&#xff0c…

【web靶场】之upload-labs专项训练(基于BUUCTF平台)

前言 该靶场&#xff0c;是通过平台BUUCTF在线评测中的靶场进行的&#xff0c;基于linux搭建的 当然若是想要该靶场&#xff0c;可以采用github上的醒目&#xff0c;点击后面文字即可访问c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场 或者本人分享在网盘中&a…