10分钟快速入门UI自动化-Puppeteer

news2024/12/29 8:26:00

目录

先简单介绍一下:

工欲善其事必先利其器,首先把所需要的工具装好

1. 安装node

2. 安装npm (node安装时会自动安装npm,如果已安装node,此步请忽略)

3. 安装cnpm (npm下载包失败,选择cnpm安装)

4. 新建一个node工程

工具装好了,case写起来!!

先小试牛刀一下,写一个简单的demo

接下来就可以在demo的基础上编辑自己的case

另外分享一个小白福利Chrome插件:puppeteer recorder

case已经会写了,那么我们使用mocha测试框架将case优美的执行起来吧

最后


这次带大家入门的是转转内部实现UI自动化测试的一种方案: Puppeteer+Mocha

目前应用于转转图书、奢侈品、商业等业务等多个Web/H5业务的线上流程监控;

先简单介绍一下:

Mocha 是JavaScript的一种单元测试框架

Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium

相较于大家熟悉的Appium方案,通过Appium 服务器 控制已连接的手机设备 进行UI操作

Puppeteer+Mocha 的方案,就是在Mocha框架里 写一些js代码, 调用Puppeteer 启动一个浏览器并操纵它完成你的UICase的操作

 

工欲善其事必先利其器,首先把所需要的工具装好

1. 安装node

  • https://nodejs.org/zh-cn/download/ 下载后直接安装
  • 配置环境变量
  • 查看版本:
node -v

2. 安装npm (node安装时会自动安装npm,如果已安装node,此步请忽略)

安装最新版本:

npm install npm@latest -g

查看版本:

npm -v

3. 安装cnpm (npm下载包失败,选择cnpm安装)

执行命令:

sudo npm install -g cnpm --registry=https://registry.npm.taobao.org (设置淘宝镜像)

验证:

cnpm -v

4. 新建一个node工程

npm i --save express

此时根目录会出现: package.json、package-lock.json 和 node_modules 文件夹

 

安装工程依赖 package.json增加mocha、puppeteer 版本信息

"mocha": "^8.3.2",
"puppeteer": "^1.18.0",
然后执行 以下命令,安装puppeteer和mocha
npm install

工具装好了,case写起来!!

先小试牛刀一下,写一个简单的demo

创建一个js文件,编写以下代码

const puppeteer = require('puppeteer');

async function test()

{

// 创建一个浏览器实例 Browser 对象

  const browser = await puppeteer.launch({

    args: ['--no-sandbox', '--disable-setuid-sandbox'], //开启无头

    headless:false,

    ignoreHTTPSErrors: true,

  });

// 通过浏览器实例 Browser 对象创建页面 Page 对象

  const page = await browser.newPage();

// 通过url参数打开指定的页面

  await page.goto('[https://m.zhuanzhuan.com/open/ZZBook/index.html?needHideHead=3#/book-home](https://m.zhuanzhuan.com/open/ZZBook/index.html?needHideHead=3#/book-home)');

// 对页面进行截图

  await page.screenshot({path: 'homePage.png'});

// 关闭浏览器

  await browser.close();

};

module.exports = test

test()

运行这个demo,你就完成了一次简单的UICase

接下来就可以在demo的基础上编辑自己的case

  • 第一步:获取你要操作的元素的selector
    • 在浏览器页面 按 F12 打开调试工具 或者 鼠标右键菜单-点击“检查”,查看页面控件树
    • 选择对应的元素,在控件树中-鼠标右键 - 复制copy -selector
  • 第二步:根据下列对应的puppeteer对应的api,丰富你的uicase的操作
//页面返回
page.goBack([options])

//等待xx元素
page.waitForSelector(selector[, options])

//跳转
page.goto(url[, options])

//设置cookies
page.setCookie(...cookies)

//触摸点击操作
page.tap(selector)

//鼠标点击操作
page.click(selector[, options])

//Puppeteer中文手册
//https://zhaoqize.github.io/puppeteer-api-zh_CN/
反复使用以上两步,就能实现你自己的UICase啦

另外分享一个小白福利Chrome插件:puppeteer recorder

它能自动录制页面上的操作,生成puppeteer 代码

  • 访问https://cloud.tencent.com/developer/article/1470481 下载插件
  • 安装到Chrome拓展程序里,开启它
  • 开启后,在浏览器的右上角有一个录像机的标签,点击它并开始录制,窗口显示Recording...
  • 操作页面执行你的case流程,操作完成之后点击录像机图标,停止录制,复制生成puppeteer代码即可

case已经会写了,那么我们使用mocha测试框架将case优美的执行起来吧

因为mocha默认执行test目录下的文件,所以在test目录下新建一个caseList.js,作为执行文件 文件内容格式如下:

const case1 = require('../cases/demo')

// describe定义测试套件名称
describe('用例集合',function() {

  before(function() {console.log('开始执行用例啦')});
  
  // it定义单个测试用例
  it('case1',async function() {

    [//this.timeout](//this.timeout)(0);

    await case1();});

  it('case2',async function() {

    [//this.timeout](//this.timeout)(0);

    await case1();});

  after(function() {console.log('用例都执行完啦')});

});

Mocha同时提供了only,skip等控制用例执行方法和钩子函数before,after等。

在项目路径下执行mocha命令:

mocha test/caseList

就能得到一个简洁明了的测试报告了

 

如果觉得这个报告太简洁明了了,那么mocha还可以生成可视化报告哦 先安装可视化报告插件

npm install --save-dev mochawesome

再执行

mocha test/caseList --reporter mochawesome

就能在case执行完之后,在mochawesome-report目录下生成HTML的测试报告

到这里,你就能使用puppeteer+mocha编辑自己uicase,并生成不错的测试报告啦

最后

Puppeteer、Mocha 的功能不仅仅如此

编写更复杂的场景case、实现提效小工具、远程自动执行监控,都能完成。

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。 

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

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

相关文章

【ICer必备 4】IC封装设计流程

【ICer必备 3】模拟IC设计全流程 ------------------------------------------------文末附往期文章链接--------------------------------------前言一、IC封装设计过程二、常见IC封装类型三、常见封装特点四、封装设计常用软件五、EM仿真常用EDA(1)HFS…

apt命令概述,apt命令在Ubuntu16.04安装openjdk-7-jdk

apt是一条linux命令,适用于deb包管理式操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。deb包是Debian 软件包格式的文件扩展名。 翻译过来就是: apt是一个命令行包管理器,为 搜索和管理以及查询…

解决MySQL删除数据后自增主键ID不连贯问题

首先我们需要取消id的自增和主键 下列代码以water表中的id列为例 alter table watermodify id int not null;alter table waterdrop primary key;然后重新生成id列 set i0; update water set water.id(i:i1);下一步就是重新设置为主键自增 alter table wateradd primary key…

【JSP技术】web杂谈(2)之JSP是什么?

涉及知识点 什么是JSP,JSP的特点,JSP的未来趋势,JSP的应用范例。深入了解JSP技术。 原创于:CSDN博主-《拄杖盲学轻声码》,更多内容可去其主页关注下哈,不胜感激 文章目录 涉及知识点前言1.什么是JSP2&…

Webpack和Vite简单使用

目录 WebPack 介绍 基础使用 初始化使用 webpack.config.js文件 webpack开发服务器 vite 介绍 使用 使用vite创建vue框架项目 WebPack 介绍 当我们习惯了在node中编写代码的方式后,在回到前端编写html、css、js这些东西会感觉到各种的不便。比如: 不能放心…

九、ElasticSearch 运维 -集群维度

1. 查看集群健康 用于简单的判断集群的健康状态,集群内的分片的分配迁移情况。 GET _cluster/health-------------------------Respond----------------------------- {"cluster_name" : "test-jie","status" : "green",…

使用数组的方式计算---任意给出一个年,月,日,判断出这是一年的第几天

任意给出一个年,月,日,判断出这是一年的第几天; 闰年算法:能被4整除且不能被100整除,或者能被400整除 如2015年 5 10 是这一年的第131天 使用数组的方式计算,将每个月的天数放在一个数…

蜂网互联 企业级路由器v4.31 密码泄露漏洞

漏洞描述 蜂网互联企业级路由器v4.31存在接口未授权访问,导致攻击者可以是通过此漏洞得到路由器账号密码接管路由器 漏洞影响 蜂网互联企业级路由器v4.31 网络测绘 app“蜂网互联-互联企业级路由器” 漏洞复现 payload http://ip:port/action/usermanager.ht…

c++ 杂食记

1. inline关键字 在C中,inline关键字用于指定函数应该被内联。 当一个函数被内联时,它的代码将直接插入到调用该函数的代码中,而不是作为单独的函数调用 这可以提高程序的性能,因为它减少了函数调用的开销,并提高了数…

计算机网络那些事之 MTU 篇

哈喽大家好,我是咸鱼 今天我们来聊聊计算机网络中的 MTU (Maximum Transmission Unit) 什么是 MTU ? MTU(Maximum Transmission Unit)是指数据链路层中的最大传输单元 通俗点来讲,MTU 是指数据链路层能…

基于workerman 即时通讯聊天(uniapp + pc)

laychat workerman 实现 webIM即时通讯系统 下载 laychat-master.zip https://github.com/hszyh/laychat 实现了功能: 1、通过snake后台实现对聊天成员的增删改查,动态推送给在线的用户 2、实现了群组的查找 3、实现了创建我的群组,删除我的群组,添加群组成员…

性能测试工具——LoadRunner内部介绍以及常见问题

目录 Tools Recording Options General Options 注释脚本 Review log Runtime-Settings General Network Browser Internet Protocol HTTPS证书 总结: Tools Recording Options 接下来我们挨个看一下里面的东东以及区别 General(通常的&am…

【Python编程】将格式为ppm和pgm的图片批量转换为png或jpg格式的图片

前序 如果文件夹中有异常图片,则可以使用以下代码从而跳过这些异常图片而不影响转换代码的运行。例如本人在解压时中断而导致的图片异常问题,图片示例如下: from PIL import ImageFile ImageFile.LOAD_TRUNCATED_IMAGES True正文 导入用…

Golang学习日志 ━━ gin-vue-admin插件开发记录

gin-vue-admin是一套国人用golang开发的后台管理系统,本文记录插件开发内容。 官网:https://www.gin-vue-admin.com/ 学习视频:https://www.bilibili.com/video/BV1kv4y1g7nT/ 插件目录 后端位置:\server\plugin\ 前端位置&#…

信号与系统复习笔记——采样与通讯系统

信号与系统复习笔记——采样与通讯系统 采样定理 冲激串采样函数可表示为: p ( t ) ∑ n − ∞ ∞ δ ( t − n T ) p(t) \sum_{n-\infty}^{\infty} \delta(t - nT) p(t)n−∞∑∞​δ(t−nT) 周期 T T T 称为采样周期,而 ω s 1 T \omega_s …

7月29-31日·相约上海丨上海国际智能遮阳与建筑节能展览会即将举办

上海国际智能遮阳与建筑节能展览会(ISSE)即将盛大召开。这个七月,期待您的参与,一同共聚盛会! 1、关于展会 国内建筑遮阳市场尚在快速发展期,随着社会经济的发展以及建筑节能环保概念的不断深入&#xff…

开发的功能不都是经过上线测试,为什么上线后还会那么多 Bug ?

你是否也经过这样的灵魂拷问:「开发的功能不都是经过上线测试的吗?为什么上线后还会那么多 Bug ?」。 大家明明都很努力,为什么「输出」的结果没有更进一步?今天我们就水一水这个「狗血」话题,究竟是谁个锅…

一半以上的年轻人存款不足10万元,能带给我们什么思考?

目录 年轻人存款现状现在的年轻人真的没有存款意愿吗?为什么年轻人存款少?收入低,臣妾做不到啊生活成本高消费观念不同超前消费、过度负债存款意识弱 依据自身情况聊聊你的目前的存款在哪一个区间?你觉得存款难吗?谈谈…

Open62541 NodeSet loader 编译与使用

大多数的OPC UA 建模工具通常是将NodeSet 编译成为C 或者C# 的源代码,然后和Server 程序一起编译。比如uaModeler,Opc foundation 的UA ModelCompiler 以及Open62541 提供的nodeset_Compiler 都是如此,这种方式在载入配套规范的Nodeset 无疑是…

使用Jenkins构建发布一个简单的maven项目

上一章,完成了jenkins在ubuntu上的安装,这一章将使用单个Jenkins服务完成一个maven项目的打包和发布。 1、在Jenkins的管理页面中安装相关插件 用到的插件有:Maven Integration、Git、Publish Over SSH三个,在Dashboard -> M…