CukeTest+Puppeteer的Web自动化测试(二)

Stella981
• 阅读 593

  上一篇我们讲了CukeTest+Puppeteer的相关理论知识,带大家认识熟悉了CukeTest如何运行与如何编写剧本,Puppeteer大体的理论体系与如何结合使用,但一直没有给大家进行上手实战操作。这一篇,我就带大家一起来实战燥起来~~~

测试页面以百度首页为例,我们用CukeTest+Puppeteer编写功能测试Demo,将上篇讲的相关知识点结合起来练手。

CukeTest官方文档:http://www.cuketest.com/zh-cn/

Puppeteer官方文档:https://zhaoqize.github.io/puppeteer-api-zh_CN/

一、实例1

功能测试:参数化形式打开多个网页

  1、打开CukeTest我们来新建一个空项目,安装Node和Puppeteer,注意(两者版本兼容问题),上文中已提到过的。

  2、编辑剧本相关参数

  3、编写剧本对应的脚本

  4、运行

如下图

CukeTest+Puppeteer的Web自动化测试(二)

 剧本的文本如下

# language: zh-CN
功能: 百度首页
打开百度首页

  @openPage
  场景大纲: 页面打开
    假如打开百度首页"<param1>"
@pageOne
    例子: 
      | param1                  |
      | https://www.baidu.com/  |
      | https://www.runoob.com/ |
@pageTwo
    例子: 
      | param1                   |
      | https://www.csdn.net/    |
      | https://www.cnblogs.com/ |

  @baiduSearch
  场景: 百度首页搜索
  打开百度首页,搜索'puppeteer',百度查询并截图保存结果
    假如打开百度首页"https://www.baidu.com/"
    当输入"puppeteer",点击百度一下
    那么截图保存搜索结果

剧本对应的脚本

 1 //引用cucumber和puppeteer,使用各自相关的API
 2 const {
 3     Given,
 4     When,
 5     Then
 6 } = require('cucumber');
 7 const puppeteer = require('puppeteer');
 8 //默认情况下,异步hook和步骤在5000毫秒后超时,这个可以全局修改超时时长
 9 const {
10     setDefaultTimeout
11 } = require('cucumber');
12 setDefaultTimeout(60 * 1000);
13 //变量定义
14 let browser = null;
15 let page = null;
16 
17 //// 你的步骤定义 /////
18 
19 Given("打开百度首页{string}", async function (arg1) {
20     /*
21     当 Puppeteer 连接到一个 Chromium 实例的时候会通过 puppeteer.launch 创建一个 Browser 对象。
22     创建一个 Browser 类的实例对象
23     executablePath:可运行 Chromium 或 Chrome 可执行文件的路径
24     headless: 是否以 无头模式 运行浏览器
25     defaultViewport: null, args: ['--start-maximized']:视图窗口最大化
26     defaultViewport选项设置为null以禁用800x600分辨率。它需要最大分辨率
27     ignoreDefaultArgs: ['--enable-automation']:
28     禁止展示chrome左上角有个Chrome正受自动软件控制,避免puppeteer被前端JS检测到
29     */
30     browser = await puppeteer.launch({
31         executablePath: 'D:\\Demo\\node_modules\\puppeteer\\.local-chromium\\win64-722234\\chrome-win\\chrome.exe',
32         headless: false,
33         defaultViewport: null,
34         args: ['--start-maximized'],
35         ignoreDefaultArgs: ['--enable-automation']
36     });
37     //创建一个新的Page对象
38     page = await browser.newPage();
39     //打开链接
40     await page.goto(arg1);
41     //等待3s
42     await page.waitFor(3000);
43     //关闭chromium
44     await browser.close();
45 });

运行:浏览器按顺序打开剧本中编辑的四个网页,打开一个网页后关闭浏览器,紧接着打开下一个。

二、实例2

功能:打开百度首页搜索,并保存截图。

在基于上面的实例1,接着编写场景2,如下图

CukeTest+Puppeteer的Web自动化测试(二)

 场景对应的脚本:

 1 //场景2:百度首页搜索
 2 When("输入{string},点击百度一下", async function (arg1) {
 3     //匹配定位元素,定位输入框元素,并输入'puppeteer'
 4     await page.type('#kw', arg1);
 5     //等待2s
 6     await page.waitFor(2000);
 7     //点击“百度一下”按钮
 8     await page.click('#su');
 9     //等待3s
10     await page.waitFor(3000);
11 });
12 
13 Then("截图保存搜索结果", async function () {
14     //截图并保存,截图路径为path,截图类型可以是 jpeg 或者 png,默认 'png'.
15     await page.screenshot({ path: 'baiduHomeSearch.png' });
16     //关闭chromium
17     await browser.close();
18 });
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Souleigh ✨ Souleigh ✨
3年前
前端性能优化 - 雅虎军规
无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化35条军规,这样对于优化有一个比较清晰的方向.35条军规1.尽量减少HTTP请求个数——须权衡2.使用CDN(内容分发网络)3.为文件头指定Expires或CacheControl,使内容具有缓存性。4.避免空的
Stella981 Stella981
3年前
Python+Selenium自动化篇
本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子。0.元素定位方法主要有:id定位:find\_element\_by\_id('')name定位:find\_element\_by\_name('')class定位:find\_element\_by\_class\_name(''
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这