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

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

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

先简单介绍一下:

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

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

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

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

be51e4c900528500cb4e975c07d105fa.png

工欲善其事必先利其器,首先把所需要的工具装好
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 文件夹

15ea9bc2a08b070965975b25a978efc1.png

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

 
  1. "mocha": "^8.3.2",

  2. "puppeteer": "^1.18.0",

然后执行 以下命令,安装puppeteer和mocha
npm install
工具装好了,case写起来!!

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

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

 
  1. const puppeteer = require('puppeteer');

  2. async function test()

  3. {

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

  5. const browser = await puppeteer.launch({

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

  7. headless:false,

  8. ignoreHTTPSErrors: true,

  9. });

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

  11. const page = await browser.newPage();

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

  13. 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)');

  14. // 对页面进行截图

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

  16. // 关闭浏览器

  17. await browser.close();

  18. };

  19. module.exports = test

  20. test()

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

接下来就可以在demo的基础上编辑自己的case
  • 第一步:获取你要操作的元素的selector

    • 在浏览器页面 按 F12 打开调试工具 或者 鼠标右键菜单-点击“检查”,查看页面控件树

    • 选择对应的元素,在控件树中-鼠标右键 - 复制copy -selector

 第二步:根据下列对应的puppeteer对应的api,丰富你的uicase的操作

 
  1. //页面返回

  2. page.goBack([options])

  3. //等待xx元素

  4. page.waitForSelector(selector[, options])

  5. //跳转

  6. page.goto(url[, options])

  7. //设置cookies

  8. page.setCookie(...cookies)

  9. //触摸点击操作

  10. page.tap(selector)

  11. //鼠标点击操作

  12. page.click(selector[, options])

  13. //Puppeteer中文手册

  14. //https://zhaoqize.github.io/puppeteer-api-zh_CN/

反复使用以上两步,就能实现你自己的UICase啦
另外分享一个小白福利Chrome插件:puppeteer recorder

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

  • 访问https://cloud.tencent.com/developer/article/1470481 下载插件

  • 安装到Chrome拓展程序里,开启它

    9f7422371d9b4c23ae46b51d916637fc.png

开启后,在浏览器的右上角有一个录像机的标签,点击它并开始录制,窗口显示Recording...

3ca5182244aa5ba363f3b012ed93ee4a.png

操作页面执行你的case流程,操作完成之后点击录像机图标,停止录制,复制生成puppeteer代码即可

c83e443a956a21f20ae10052f02ed051.png

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

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

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

  2. // describe定义测试套件名称

  3. describe('用例集合',function() {

  4. before(function() {console.log('开始执行用例啦')});

  5. // it定义单个测试用例

  6. it('case1',async function() {

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

  8. await case1();});

  9. it('case2',async function() {

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

  11. await case1();});

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

  13. });

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

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

mocha test/caseList

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

4f5d976e0a51c5988f231bdb30119217.png

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

npm install --save-dev mochawesome

再执行

mocha test/caseList --reporter mochawesome

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

722e064df104f79b3c6e8780039981fc.png

c9fa20e7ea119ab2cc5cee280f5df0ea.png

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

 

总结:

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

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方进群即可自行领取。

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

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

相关文章

Spring核心接口:BeanFactory接口

一图胜千言 BeanFactory 属性&方法解析 点击展开注意:以上代码仅供参考,可能存在不完整或不准确的情况。 public interface BeanFactory {// 根据Bean名称返回Bean实例。// 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。Obj…

【Linux系统编程】进程的退出与等待

进程的创建 fork()用于创建子进程。但fork创建的子进程获得的是父进程(即调用 fork() 的进程)的一份几乎完全相同的副本,包括父进程的代码、数据、堆、栈和数据结构等内容。当进程调用fork后,一旦控制转移到内核中的fork代码后&am…

SpringBoot(接受参数相关注解)

文章目录 1.基本介绍2.PathVariable 路径参数获取信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 3.RequestHeader 请求头获取信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 4.RequestParameter 请求获取参数信息1.代码实例…

ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

发生的错误信息: File "C:\Users\malongqiang\.conda\envs\ObjectDetection\lib\ssl.py", line 1309, in do_handshakeself._sslobj.do_handshake() ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。 分析原因: …

App Inventor 2 Clipboard 拓展:实现剪贴板的复制粘贴功能

效果如下: 此 Clipboard 拓展由中文网开发及维护,最新版本 v1.0,基于 TaifunClipboard 开发。 使用方法 属性及方法很简单,默认操作成功后显示提示信息,SuppressToast设置为 假 后,则不显示提示信息。 经测…

k8s部署InfluxDB

(作者:陈玓玏) 1. 拉取镜像 docker pull influxdb #拉取镜像 docker run -d influxdb:latest #后台运行容器 docker exec -it 89b /bin/bash #进入容器,89b是容器ID的前三位 cd /usr/bin #进入容器后,进入此文件夹…

计数类Dp

文章目录 AcWing 900. 整数划分思路1. 完全背包AC CODE 2. 计数DpAC CODE AcWing 900. 整数划分 链接:https://www.acwing.com/activity/content/problem/content/1008/ 思路 1. 完全背包 完全背包的链接:https://blog.csdn.net/2301_78981471/artic…

【原创】EPLAN中端子图表的制作

在上一期的文章中,我们主要谈了EPLAN制图中常用符号,有伙伴提出,让我们写一篇,关于端子图表的技术资料。我们这篇文章就是作为对伙伴评论的回复。 在EPLAN制图的过程中,我们一起探讨技术问题,共同解决我们现实工作中遇到的问题,欢迎大家在评论区留言,我们会根据大家的…

IPFoxy的正确打开方式

IPFoxy是一个全球动静态代理IP服务器软件,为全球用户提供优质的大数据代理服务,促进网络业务高校进行。目前拥有千万真实纯净IP资源,覆盖超过220个国家和地区,汇聚成优质海外代理池,支持http、https、socks5多种协议类…

人机交互三原则,网络7层和对应的设备、公钥私钥

人机交互三原则 heo Mandel提出了人机交互的三个黄金原则,它们强调了相似的设计目标,分别是: 简单总结为:控负持面–>空腹吃面 1,用户控制 2,减轻负担 3,保持界面一致 置用户于控制之下&a…

2024/3/14 定时器时钟

感觉和之前自己写的那个差不太多&#xff0c;只是用了定时器。贴一下代码. main.c #include <REGX52.H> #include "LCD1602.h" #include "Delay.h" #include "Timer0.h" unsigned char Sec59,Min49,Hour17;void main() {LCD_Init();Time…

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台

tar -xzf prometheus-2.7.0-rc.1.linux-amd64.tar.gzcd prometheus-2.7.0-rc.1.linux-amd64/./prometheus --config.fileprometheus.yml --web.listen-address:5555 Prometheus 默认监听端口号为 9090&#xff0c;为了不与系统上的其它进程监听端口冲突&#xff0c;我们在启动…