nightwatch对前端做自动化测试
记录node环境使用nightwatch、selenium-server、chromedriver对部署后的前端页面进行自动化测试的项目搭建过程。
1.目标
能对部署后的前端项目进行自动化测试,能自动打开网站,登录、判断页面元素、点击按钮、检查log、界面截图等。
2.项目结构
整体结构如下图:

node_modules是依赖包;
reports是测试的输出结果;
specs是测试内容、规则,里面可以放多个文件;
nightwatch.conf即nightwatch的配置;
runner.js项目测试入口文件;
package.json项目包信息;
README.md项目描述。
下面详细介绍搭建过程:
2.1 创建项目目录auto-test,添加specs、reports子目录
在根目录下添加package.json,内容如下:
{
"name": "auto-test",
"version": "1.0.0",
"author": "wangshiyuan",
"description": "automatically test the front-end projects after depolyment",
"scripts": {
"test": "node ./runner.js"
},
"keywords": [
"e2e",
"auto-test"
],
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"devDependencies": {
"chromedriver": "^78.0.1",
"cross-spawn": "^5.0.1",
"nightwatch": "^0.9.12",
"selenium-server": "^3.0.1"
}
}
注意node和npm环境,chromedriver需要和浏览器版本一致; 2.2 添加nightwatch.conf.js文件
// http://nightwatchjs.org/gettingstarted#settings-file
// 具体的配置项可以去nightwatch的官网查看
//chormedriver 地址
//http://chromedriver.storage.googleapis.com/index.html
module.exports = {
src_folders: ['specs'],
output_folder: 'reports',
custom_assertions_path: "",
selenium: {
start_process: true,
server_path: require('selenium-server').path, //设置selenium-server 的jar包路径
host: '127.0.0.1',
port: 9009,
cli_args: {
'webdriver.chrome.driver': require('chromedriver').path //设置chromedriver 的jar包路径
}
},
test_settings: {
default: {
selenium_port: 9009,
selenium_host: 'localhost',
silent: true,
globals:""
},
chrome: {
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true
}
},
firefox: {
desiredCapabilities: {
browserName: 'firefox',
javascriptEnabled: true,
acceptSslCerts: true
}
}
}
}
注意:
src_folders: ['specs'], //测试规则的目录,需要添加该目录
output_folder: 'reports',//测试输出的目录,需要添加该目录
2.3添加runner.js
process.env.NODE_ENV = 'testing'
let opts = process.argv.slice(2) if (opts.indexOf('--config') === -1) {
opts = opts.concat(['--config', 'nightwatch.conf.js'])
}
if (opts.indexOf('--env') === -1) {
opts = opts.concat(['--env', 'chrome'])
} const spawn = require('cross-spawn')
const runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' }) runner.on('exit', function (code) {
process.exit(code)
}) runner.on('error', function (err) {
throw err
})
注意config中的文件名称:
opts = opts.concat(['--config', 'nightwatch.conf.js'])
2.4 在specs中添加demo.js文件(这里名称随意),可以添加多个文件
module.exports = {
'Test Demo': function (browser) {
let url = 'https://192.168.3.13/demo'
// 启动浏览器并打开页面
browser.maximizeWindow()
browser.url(url)
browser.waitForElementVisible('div.login', 3000)
browser.assert.elementPresent('input.el-input__inner')
browser.assert.elementPresent('input.el-input__inner')
browser.click('button.el-button.el-button--primary')
browser.pause(3000)
browser.waitForElementVisible('#app', 3000)
browser.assert.visible('div.layer-control')
browser.click('div.layer-control .el-checkbox')
browser.pause(3000)
'header-r-t'
browser.click('ul.header-r-t>li:nth-child(3)').pause(4000)
browser.back()
browser.click('ul.header-r-t>li:nth-child(4)').pause(4000)
browser.back()
browser.click('ul.header-r-t>li:nth-child(5)').pause(4000)
browser.getLog('browser', function (logs) {
console.info(logs)
})
browser.pause(3000)
browser.saveScreenshot('reports/smrt.png')
browser.end()
}
}
大意是打开页面,点击登录按钮,判断某些按钮的可见性,输出log,截图等,具体规则可以参考nightwatch的api(https://nightwatchjs.org/api)
2.4 执行测试
cmd进入项目目录,输入npm install 安装依赖,安装完后增加node_modules文件夹;
cmd输入node runner.js 执行测试,会自动打开浏览器安装specs下的规则执行,cmd会输出断言的结果,reports目录会有测试结果及截图。

3.注意事项
chromedriver的版本需要和浏览器版本一致,请自行确认后修改packjson.json中的chromedriver配置项,重新install。
参考:
nightwatch: https://nightwatchjs.org/api
Selenium: https://github.com/SeleniumHQ/selenium/wiki/Logging
nightwatch对前端做自动化测试的更多相关文章
- 从手工测试转型web自动化测试继而转型成专门做自动化测试的学习路线。
在开始之前先自学两个工具商业web自动化测试工具请自学QTP:QTP的学习可以跳过,我是跳过了的.开源web自动化测试工具请自学Selenium:我当年是先学watir(耗时1周),再学seleniu ...
- 在做自动化测试之前你需要知道的,转自:http://www.cnblogs.com/fnng/p/3653793.html
什么是自动化测? 做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多.一直想动笔写一篇文章分享自动化测试实践中的一些经验.终于决定花点时间来做这件事儿. 首先理清自动化测试的概念 ...
- 从一次故障聊聊前端 UI 自动化测试
背景 事件的起因在于老板最近的两次"故障",一次去年的,一次最近.共同原因都是脚手架在发布平台发布打包时出错,导致线上应用白屏不可用. 最神奇的是,事后多次 Code Review ...
- 用Postman做自动化测试的功能
自动化测试应该在桌面应用有该功能,在chrome的插件不知道有没有,我也没装chrome版的Postman Postman工具介绍图 上面这张就是Postman的操作界面.一开始我就是这样做简单的数据 ...
- <自动化测试方案_1>第一章、为什么要做自动化测试?(Why)
第一章.为什么要做自动化测试?(Why) 测试的产品分为:桌面程序(C/S).web应用(B/S) 我们的产品是B/S (一)迭代中省去人力测试非新增功能: 在项目中由于测试时间的限制,测试中只能实现 ...
- 前端接口自动化测试工具-DOClever使用介绍(转载)
DOClever 不仅集成了文档编写,团队协作,接口运行,mock 数据等功能,还有两个功能是让我们团队大大的提高工作效率的.一个是接口的自动化生成,可以根据接口数据自动生成文档信息,还有一个便是本文 ...
- API接口自动化之3 同一个war包中多个接口做自动化测试
同一个war包中多个接口做自动化测试 一个接口用一个测试类,每个测试用例如下,比如下面是4个测试用例,每个详细的测试用例中含有请求入参,返回体校验,以此来判断每条测试用例是否通过 一个war包中,若含 ...
- 用 shell 脚本做自动化测试
前言 项目中有一个功能,需要监控本地文件系统的变更,例如文件的增.删.改名.文件数据变动等等.之前只在 windows 上有实现,采用的是 iocp + ReadDirectoryChanges 方案 ...
- 做自动化测试选择Python还是Java?
你好,我是测试蔡坨坨. 今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言. 前言 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发展的 ...
随机推荐
- GSS1 A - Can you answer these queries I
//题意:询问一段区间的最大子序列的值. //做法:维护四个值:包含当前区间左端点的最大子区间LM,包含当前区间右端点的最大子区间RM.当前区间的最大子区间M, 当前区间的区间和S //tree[ro ...
- Transformer 比较好的博客
1. https://www.jianshu.com/p/0c196df57323 细节理解: 2. https://zhuanlan.zhihu.com/p/44121378 3. https:// ...
- ehcache.xml 配置文件备忘录(不建议出现中文注释,此处备忘)
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLoc ...
- @Scope("prototype")的正确用法——解决Bean的多例问题
转自: https://www.jianshu.com/p/54b0711a8ec8 1. 问题,Spring管理的某个Bean需要使用多例 在使用了Spring的web工程中,除非特殊情况,我们 ...
- #C++初学记录#日常学习函数
静态变量static,只进行一次初始化. #include<cstring> #include<iostream> using namespace std; int main( ...
- cropper手机使用实例
cropper手机使用实例 一.总结 一句话总结: 启示:还是要多个相关的实例交叉使用,相互印证,查漏补缺,可以更加高效和方便和节约时间 二.Cropper.js从前台到后台的完整实例应用 转自或参考 ...
- laravel文件存储、删除、移动等操作
laravel文件存储.删除.移动等操作 一.总结 一句话总结: 启示:可以在操作遇到问题的时候,找文档找实例好好实验一下,也就是学习巩固一下,不必一定要死纠排错 1.laravel文件删除注意? 1 ...
- 贝叶斯分类器——递增式学习partial_fit方法
版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_39777626/articl ...
- 【转】php7+IIS 配置环境(windows环境)
继php7+apache2.4 配置环境(window环境)后,由于B2C项目准备上线:特此小编在阿里云上搭建PHP7环境,为此特写上搭建过程希望正处于搭建php7+IIS(windows环境)中的朋 ...
- 免费s账号网站
下面网址按排序顺序优先使用,数字越小优先级越高 1,https://io.freess.today/ 2,https://free-ss.site/ 3,https://ss.freess.org/ ...