自动化神器 Playwright 的 Web 自动化测试解决方案

 

 

 

1. 主流框架的认识

image.png

  • 总结:
    • 由于Selenium在3.x和4.x两个版本的迭代中并没有发生多大的变化,因此Selenium一统天下的地位可能因新框架的出现而变得不那么稳固。
    • 后续的Cypress、TestCafe、Puppeteer被誉为后Selenium时代Web UI自动化的三驾马车。但是由于这三个框架都是基于JavaScript开发的,且都不支持Python,所以使用率并没有很高。
    • playwright则是综合了上述框架的优点,提供了很好的体验,将来可能成为流行的趋势。

2. Playwright认识

  • Playwright简介

    • 2020年,微软(Microsoft)开源了一个名为Playwright的工具,与Selenium一样入门简单,支持多语言(Python、Java、Node.js、.NET),支持多浏览器(Chromium、Firefox、Webkit),可跨平台(Windwos、Linux、Mac OS)
    • Playwright同时支持接口自动化和UI自动化,为现代web应用提供了可靠的端到端的测试能力。
  • Playwright优势

    • 1)自动等待功能让自动化更可靠
    • 2)自动追踪:可以很方便地配置重试策略,自动的追踪结果,以截图和录屏的方式进行记录。
    • 3)断言机制:会根据网络环境进行自动断言,直到满足某种条件为止。
    • 4)异步执行:Playwright基于socket进行双向通讯,支持同步与异步执行两种方式
    • 5)可运行多页仿真场景:Playwright是通过上下文管理浏览器,相当于每一个测试用例都会创建一个独立的上下文,浏览器的上下文其实就是一个全新的浏览器,这种方式的好处就是在提速的同时又实现测试与测试之间的隔离,使得测试结果更加准确,所以可以实现并行执行。
    • 6)强大的工具集:还我们提供了强大的工具集,例如:脚本录制工具codegen、脚本编写以及调试工具playwright等

3. Playwright环境搭建

  • Python环境:python解释器+IDE工具,不知道怎么安装的可参考: python3.4 + pycharm 环境安装 + pycharm 使用

  • Playwright环境:

    • 安装Playwright:pip install playwright -i https://pypi.tuna.tsinghua.edu.cn/simple

image.png

  • 安装内置浏览器(chromium,firefox,webkit):playwright install

image.png

4. Playwright入门实战

1)脚本录制
  • 案例1:实现Web ui自动化,打开浏览器,访问测试派(测试派 - 软件测试工程师的心灵社区),点击登录后在进行登录操作(输入用户名、密码,点击登录按钮)
  • 操作步骤:
    • 第一步:pycharm--Terminal中输入命令:playwright codegen,会自动打开浏览器和Playwright Inspector工具,Playwright Inspector工具自动开启录制功能
    • 第二步:在打开的浏览器中进行相关的操作,如访问地址、点击或输入操作
    • 第三步:操作完成后,在Playwright Inspector中点击Record停止录制,然后复制代码即可
from playwright.sync_api import Playwright, sync_playwright, expectdef run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("http://testingpai.com/")page.get_by_text("登录").click()page.get_by_placeholder("用户名/邮箱/手机号").click()page.get_by_placeholder("用户名/邮箱/手机号").fill("kemi")page.get_by_placeholder("用户名/邮箱/手机号").press("Tab")page.get_by_placeholder("密码").fill("123456")page.pause()  # 断点调试功能page.get_by_role("button", name="登录").click()# ---------------------context.close()browser.close()with sync_playwright() as playwright:run(playwright)

2)录制工具快速定位元素
  • 如果我自己写代码,需要定位元素,通过Playwright Inspector工具的Pick locator可以快速获取元素定位的信息,具体操作如下截图:

image.png

  • Playwright支持两大类元素定位方式,包括:
  • 1)get_by方式
    • get_by_id: 通过元素的 id 属性来查找元素,例如:element = page.get_by_id("my-id")
    • get_by_name: 通过元素的 name 属性来查找元素,例如:element = page.get_by_name("my-name")
    • get_by_text: 通过元素的文本内容来查找元素,例如:element = page.get_by_text("Submit")
    • get_by_title: 通过元素的 title 属性来查找元素,例如:element = page.get_by_title("my-title")
    • get_by_placeholder: 通过元素的 placeholder 属性来查找元素,例如:element = page.get_by_placeholder("my-placeholder")
    • get_by_selector: 通过 CSS 选择器来查找元素,例如:element = page.get_by_selector("#submit-button")
    • get_by_xpath: 通过 XPath 表达式来查找元素,例如:element = page.get_by_xpath("//div[@class='my-class']")
    • get_by_label: 根据label属性值查找元素,类似于HTML中的label标签和对应的for属性。
    • get_by_role: 通过角色方式定位元素,例如:element = page.get_by_role("button", name="Submit")
  • 2)page.locator方式
    • 通过ID定位元素:使用page.locator("#element-id")page.locator('id=element-id')定位。
    • 通过CSS选择器定位元素:使用page.locator("css=selector")定位。例如:element = page.locator("button#submit-button")
    • 通过XPath表达式定位元素:使用page.locator("xpath=expression")定位。例如:element = page.locator("//button[@id='submit-button']")
    • 通过名称定位元素:使用page.locator("name=element-name")定位。
    • 通过链接文本定位元素:使用page.locator("text=link-text")定位。
    • 通过部分链接文本定位元素:使用page.locator("partial_text=partial-link-text")定位。
    • 通过元素属性定位元素:使用page.locator("[attribute=value]")定位。
    • 通过标签名定位元素:使用page.locator("tag=tag-name")定位。

4. Pytest+Allure+Playwright完整项目演示

1)脚本转为测试用例
  • 案例需求:将上面测试派(百度一下)的登录操作转为测试用例
  • 操作步骤:
    • 第一步:pycharm--Terminal中输入命令:playwright codegen,会自动打开浏览器和Playwright Inspector工具,Playwright Inspector工具自动开启录制功能
    • 第二步:在打开的浏览器中进行相关的操作,如访问地址、点击或输入操作
    • 第三步:操作完成后,在Playwright Inspector中点击Record停止录制
    • 第四步:在Target中选择Python下的pytest,就会自动化将录制的代码转为测试用例,然后复制代码即可。具体操作如下截图所示:

image.png

  • 代码如下:
 
from playwright.sync_api import Page, expectdef test_example(page: Page) -> None:page.goto("http://testingpai.com/")page.get_by_text("登录").click()page.get_by_placeholder("用户名/邮箱/手机号").click()page.get_by_placeholder("用户名/邮箱/手机号").fill("kemi")page.get_by_placeholder("用户名/邮箱/手机号").press("Tab")page.get_by_placeholder("密码").fill("123456")page.get_by_role("button", name="登录").click()

  • 执行用例前必须先安装插件,否则会报错,因为用例只有核心的业务操作,没有浏览器、上下文、页面的初始化,装了插件后会自动做这些初始化的操作,从而执行用例不会报错。命令:pip install pytest-playwright

image.png

2)数据驱动
  • 集合pytest的parametrize实现数据驱动
import pytest
from playwright.sync_api import Page, expect# 测试用例数据
case_data = [{'caseid':1,'username':'kemi123', 'password':'kemi123'},{'caseid':2,'username':'zhangsan', 'password':'123456'},{'caseid':3,'username':'lisi', 'password':'123456'}]# 数据驱动
@pytest.mark.parametrize('case', case_data)
def test_example(page: Page,case) -> None:username = case['username']password = case['password']page.goto("http://testingpai.com/")page.get_by_text("登录").click()page.get_by_placeholder("用户名/邮箱/手机号").click()page.get_by_placeholder("用户名/邮箱/手机号").fill(username)page.get_by_placeholder("用户名/邮箱/手机号").press("Tab")page.get_by_placeholder("密码").fill(password)page.get_by_role("button", name="登录").click()page.screenshot(path=f"images/login/登录{case['caseid']}.png")  # 截图保存到指定位置

3)报告显示
  • 通过pytest执行用例后,通过命令生成报告:allure serve outputs/allure,查看报告显示,截图如下:

image.png

 



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

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

相关文章

逼格满满,推荐一个高效测试用例工具:XMind2TestCase !

一、背景 软件测试的核心是什么?毫无疑问是测试分析和测试用例设计,也是日常测试投入最多时间的工作内容之一。 然而,传统的测试用例设计过程有很多痛点: 1、使用Excel表格进行测试用例设计,虽然成本低,但…

NeRF算法模型简析:从理论到实践的轻度解析以及如何编辑和微调

nerf模型可编辑的? NeRF模型的可编辑性(editability)指的是能够修改预训练的NeRF模型以改变其生成的场景或对象的某些特征,而不是从头开始重新训练模型。这种编辑可以是改变颜色、形状、纹理或者添加、移除和修改场景中的对象。 在…

java应用CPU过高查找原因

用top查到占用cpu最高的进程pid 根据进程ID找到占用CPU高的线程 ps -mp 60355 -o THREAD,tid | sort -r 用 printf "%x \n" 将tid换为十六进制:xid printf "%x \n" 6036 根据16进制格式的线程ID查找线程堆栈信息 jstack 60355 |grep ebcb -A…

【linux驱动开发】在linux内核中注册一个杂项设备与字符设备以及内核传参的详细教程

文章目录 注册杂项设备驱动模块传参注册字符设备 开发环境: windows ubuntu18.04 迅为rk3568开发板 注册杂项设备 相较于字符设备,杂项设备有以下两个优点: 节省主设备号:杂项设备的主设备号固定为 10,在系统中注册多个 misc 设备驱动时&…

【分布式技术】监控平台zabbix自定义模板、设置邮件报警、导入模板

目录 案例:监控当前登录人数,超过3人触发报警发送邮件 第一步:自定义模板 1、明确想要获取监控数据的命令和脚本 ​编辑 2、在被监控主机上,修改zabbix agent2的配置文件或者在zabbix agent2的配置文件目录中添加以.conf结尾…

三棋先手必胜证明

目录 创作原因 游戏规则 初始状态图 证明过程 先手必胜的证明 失败的博弈树(三个多小时的成果) 创作原因 这个棋不是网上流行的成三棋,我也不知道这个棋叫什么。由于这个棋是(横竖斜)连成三个就获胜,…

GBASE南大通用数据库如何检索单行

SELECT 语句返回的行集是它的活动集。单个 SELECT 语句返回单个行。您可使用嵌入式 SELECT 语句来从数据库将单个行检索到主变量内。然而,当 SELECT 语句返回多行数 据时,程序必须使用游标来一次检索一行。在 检索多行 中讨论“多行”选择操作。 要检索单…

虹软人脸识别白屏

1.修改jdk为1.8 2.编译版本ndk修改 ndk {abiFilters armeabi-v7a, arm64-v8a} 3.local.properties增加ndk路径 ndk.dirH\:\\Android\\SDK\\ndk\\21.1.6352462 4.最重要的一步:检查依赖库是否存在前一定要先检查有么有读取本地文件权限,下面的代码即使是放到点击事件的回调…

[AutoSar]BSW_OS 01 Autosar OS入门(一)

目录 关键词平台说明一、Autosar OS 的位置二、Autosar OS 与OSEK三、TASK 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C,C编译器HighTec (GCC) 一、Autosar OS 的位置 如在[AutoSar]基础部分 a…

RuoYi-Vue-Plus 5.X登录前流程及解密

一:问题 1. 前端传给后端的是一个加密字符串,后端controller层login接口怎么就直接解密了呢? 2. 中间经过什么步骤到达的登录接口呢? 二:个人分析 首先考虑的是拦截器、过滤器、切面AOP; 1. 使用全文搜…

面向对象的三大特性

个人主页:告别,今天 个人专栏:java趣味之旅 ​​​​​​​本专栏旨在分享学习网络编程的学习心得和复习总结,欢迎大家在评论区交流讨论 1. 封装 1.1 封装的概念 面向对象程序三大特性:封装、继承、多态。而类和对象…

计算机msvcp140.dll丢失如何解决,分享3个简单有效的方法

在计算机系统运行过程中,用户有时会遇到一个常见的错误提示——msvcp140.dll文件缺失,这一问题的发生往往会导致部分软件无法正常启动或运行。“针对计算机系统中出现的msvcp140.dll缺失问题,小编将详尽阐述并探讨5种有效的解决策略。每一种方…

基于springboot+html的汽车销售管理系统设计与实现

基于springboothtml的汽车销售管理系统 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 前言 随着汽车市场的快速发展,汽车销售企业面临着越来越大的管理…

【电路电子学】7天速通攻略+笔记

7天是 看视频记笔记刷题的总时长,时间紧迫的同学可以看情况进行缩减。个人认为做题,尤其是解析齐全的题最重要! 我校所用教材 《电路与电子学基础》唐胜安 复习总流程 所用材料(都可自行找到免费资源) 视频知识点讲…

R2机器人加载棋盘与棋子模型,对urdf、sdf的解释(区分srdf)

1、概述 urdf、sdf、srdf文件都属于xml的规范格式,解释分别如下:urdf(unified robot description format)叫做"统一机器人描述格式",主要目的就是提供一种尽可能通用的机器人描述规范,这样对于机器人的描述就可以互相移…

恭喜:ChatGPT之父与相恋多年的男友结婚,并希望早日生娃。。。

OpenAI CEO Sam Altman与伴侣Oliver Mulherin海边私密婚礼:爱情、事业与人工智能领域的交织 婚礼主持人是奥特曼的兄弟杰克奥尔特曼 壹.媒体流传 在科技界掀起波澜的OpenAI首席执行官萨姆奥尔特曼(Sam Altman),近期与他长久以来的…

Opencv实验合集——实验九:姿势估计

在上一章节(相机校准),你已经找到了相机矩阵,畸变系数等等参数。给出一个图案图像,我们便可以利用上面的信息用于计算其姿势,或者物体在空间中位于何处,比如如何旋转,如何移动等等问题。对于一个平面物体&a…

Java - FFM API 实现扫雷助手

文章目录 前言环境思路实现扫雷常量高度/宽度/雷数地图基址 屏幕坐标 效果资源 前言 使用 FFM API 实现扫雷助手. 环境 Win11 JDK 21 思路 读取扫雷地图数据判断该数据是否为雷模拟鼠标点击重复上面操作遍历地图直至完成 确定了思路,那么就要确认 windows 系…

Rust-模式解构

match 首先,我们看看使用match的最简单的示例: exhaustive 有些时候我们不想把每种情况一一列出,可以用一个下划线来表达“除了列出来的那些之外的其他情况”: 下划线 下划线还能用在模式匹配的各种地方,用来表示…

Java+Mysql存储过程生成订单序列号

Mysql存储过程生成唯一订单号 直接上代码!! 1.创建存储过程 CREATE DEFINERrootlocalhost PROCEDURE getOrderSerialNo(# 前缀in orderPrefix varchar(64), # 返回结果out result int) BEGIN# 当前流水号declare curOrderNo int;# 默认值为0declare e…