上一篇我们讲了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、运行

如下图

剧本的文本如下

# 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",点击百度一下
那么截图保存搜索结果

剧本对应的脚本

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

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

二、实例2

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

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

场景对应的脚本:

 //场景2:百度首页搜索
When("输入{string},点击百度一下", async function (arg1) {
//匹配定位元素,定位输入框元素,并输入'puppeteer'
await page.type('#kw', arg1);
//等待2s
await page.waitFor(2000);
//点击“百度一下”按钮
await page.click('#su');
//等待3s
await page.waitFor(3000);
}); Then("截图保存搜索结果", async function () {
//截图并保存,截图路径为path,截图类型可以是 jpeg 或者 png,默认 'png'.
await page.screenshot({ path: 'baiduHomeSearch.png' });
//关闭chromium
await browser.close();
});

CukeTest+Puppeteer的Web自动化测试(二)的更多相关文章

  1. CukeTest+Puppeteer的Web自动化测试(一)

    CukeTest+Puppeteer的Web自动化测试 一.初识BDD.Cucumber(黄瓜).CukeTest 行为驱动开发(Behavior Driven Development,BDD).行为 ...

  2. Web自动化测试 二 ----- HTML

    HTML 一.结构 html> 与 </html> 之间的文本描述网页 <body> 与 </body> 之间的文本是可见的页面内容 <h1> 与 ...

  3. RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)

    好久没有继续分享关于自动化测试相关的东西了,自动化在现今的测试领域已经越来越重要了,大部分公司在测试岗位招聘中都需要会相关的自动化测试知识.而 RobotFramework自动化测试框架 是自动化测试 ...

  4. TestNG测试框架在基于Selenium进行的web自动化测试中的应用

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ TestNG+Selenium+Ant TestNG这个测试框架可以很好的和基于Selenium的 ...

  5. Windows环境搭建Web自动化测试框架Watir

    Windows环境搭建Web自动化测试框架Watir 一.前言     Web自动化测试一直是一个比较迫切的问题,对于现在web开发的敏捷开发,却没有相对应的敏捷测试,故开此主题,一边研究,一边将We ...

  6. python web自动化测试中失败截图方法汇总

    在使用web自动化测试中,用例失败则自动截图的网上也有,但实际能落地的却没看到,现总结在在实际应用中失败截图的几种方法: 一.使用unittest框架截图方法:   1.在tearDown中写入截图的 ...

  7. Web 自动化测试框架 sweetest 介绍

    项目开源: https://github.com/tonglei100/sweetest 文章转载:https://segmentfault.com/a/1190000011612061 介绍 swe ...

  8. Node.js结合Selenium做Web自动化测试

    发现腾讯课堂上有个node.js结合Selenium做Web自动化测试的教学视频, 听来感觉不错,一来老师讲的还不错,二来node.js这门语言会越来越热,学会总没什么坏处,三来发现CukeTest这 ...

  9. Web自动化测试框架Watir(基于Ruby) - 第2章 使用Watir写自动化测试脚本

    一.先来看一个小DEMO 通过上一篇博文<Web自动化测试框架Watir(基于Ruby) - 第1章 Windows下安装与部署>的介绍,我们已经有了完整Watir运行环境,现在我们可以来 ...

随机推荐

  1. 标准库hashlib模块

    hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512, MD5 算法(都是基于hash的算法, ...

  2. Java算法之 二分搜寻法 ( 搜寻原则的代表)

    为什么80%的码农都做不了架构师?>>>   二分搜寻法 ( 搜寻原则的代表) 1.二分查找又称折半查找,它是一种效率较高的查找方法. 2.二分查找要求:(1)必须采用顺序存储结构 ...

  3. 全网最清晰的ConstraintLayout教程

    ConstraintLayout是AndroidStudio2.2新增的一个功能,那么这个到底是什么呢?首先第一点我们知道传统的安卓开发,页面基本都是XML编写实现,特别在一些复杂的页面上需要嵌套多层 ...

  4. vue+elementUI实现权限的部门管理

    回头看写过的项目,发现以前感觉有难度的地方,现在想想很简单,在此记录一下,不对的地方欢迎吐槽!!! 复制代码 1.实现效果 2.需求分析 主要用于平台各个部门不同权限的操作,将指定的账号放到对应的权限 ...

  5. mysql查询语句中like 的用法

    1.常见用法: (1)搭配%使用 %代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据: (2)搭配_使用 _代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出一 ...

  6. 数组输出黑科技----fwrite()

    fwrite(const void*buffer,size_t size,size_t count,FILE*stream); (1)buffer:是一个指针,对fwrite来说,是要输出数据的地址. ...

  7. POJ2421 Constructing Roads 最小生成树

    修路 时限: 2000MS   内存限制: 65536K 提交总数: 31810   接受: 14215 描述 有N个村庄,编号从1到N,您应该修建一些道路,使每两个村庄可以相互连接.我们说两个村庄A ...

  8. 2020.2.27——STL初步

    注:本文主要针对STL中的常用的操作进行总结 目录: 1.swap 2.sort 3.reverse 4.min,max(比较简单,暂且略过) 5._gcd 6.lower_bound &&a ...

  9. Android Library 发布开源库 JCenter & JitPack 攻略

    对于Android 的开源库,一般通过 JCenter 或者 JitPack 发布开源.两种方式均可~ 当你造了一个好玩有用的东西想要分享给大家时,开源出来便是一种好方式~ 一. 上传开源库到 JCe ...

  10. SpringBoot:整合Shiro

    目录 1.Shiro简介 1.1.什么是Shiro? 1.2.有哪些功能 1.3.Shiro架构(外部) 1.4.Shiro架构(内部) 2.HelloWorld 3.Shiro整合Spring Bo ...