上一篇我们讲了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. 【集群实战】NFS网络文件共享服务

    1. NFS介绍 1.1 什么是NFS? NFS是Network File System的缩写,中文意思是网络文件系统. 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. ...

  2. 【DNS域名解析命令】 nslookup

    1. nslookup作用 nslookup用于查询DNS的记录,查询域名解析是否正常,在网络故障时用来诊断网络问题 nslookup - query Internet name servers in ...

  3. javascript SDK开发之webpack中eslint的配置

    eslint的好处就不多说了.代码检查,代码报错, 智能提示,让开发人员更规范的撸代码等等. 1.安装依赖 npm install --save-dev eslint eslint-friendly- ...

  4. XmlSerializer .NET 序列化、反序列化

    序列化对象   要序列化对象,首先创建要序列化的对象并设置其公共属性和字段.为此,您必须确定要将XML流存储的传输格式,作为流或文件. 例如,如果XML流必须以永久形式保存,则创建一个FileStre ...

  5. 批量将制定文件夹下的全部Excel文件导入微软SQL数据库

    以下代码将c:\cs\文件夹下的全部Excle中数据导入到SQL数据库 declare @query vARCHAR(1000) declare @max1 int declare @count1 i ...

  6. 1秒内通关扫雷?他创造属于自己的世界记录!Python实现自动扫雷

    五一劳动节假期,我们一起来玩扫雷吧.用Python+OpenCV实现了自动扫雷,突破世界记录,我们先来看一下效果吧. 中级 - 0.74秒 3BV/S=60.81 相信许多人很早就知道有扫雷这么一款经 ...

  7. 手写实现java栈结构,并实现简易的计算器(基于后缀算法)

    一.定义 栈是一种线性表结构,栈结构中有两端,对栈的操作都是对栈的一端进行操作的,那么被操作的一端称为栈顶,另一端则为栈底.对栈的操作其实就是只有两种,分别是入栈(也称为压栈)和出栈(也称为弹栈).入 ...

  8. Shell脚本(五)函数

    总结下shell中的函数用法 #!/bin/bash function add_v1() { echo "call function add" } function add_v2( ...

  9. Intersection of Two Linked Lists (求两个单链表的相交结点)

    题目描述: Write a program to find the node at which the intersection of two singly linked lists begins. ...

  10. Java——异常那些事

    异常的基本定义 异常情形是指阻止当前方法或者作用域继续执行的问题.在这里一定要明确一点:异常代码某种程度的错误,尽管Java有异常处理机制,但是我们不能以“正常”的眼光来看待异常,异常处理机制的原因就 ...