记录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对前端做自动化测试的更多相关文章

  1. 从手工测试转型web自动化测试继而转型成专门做自动化测试的学习路线。

    在开始之前先自学两个工具商业web自动化测试工具请自学QTP:QTP的学习可以跳过,我是跳过了的.开源web自动化测试工具请自学Selenium:我当年是先学watir(耗时1周),再学seleniu ...

  2. 在做自动化测试之前你需要知道的,转自:http://www.cnblogs.com/fnng/p/3653793.html

    什么是自动化测? 做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多.一直想动笔写一篇文章分享自动化测试实践中的一些经验.终于决定花点时间来做这件事儿. 首先理清自动化测试的概念 ...

  3. 从一次故障聊聊前端 UI 自动化测试

    背景 事件的起因在于老板最近的两次"故障",一次去年的,一次最近.共同原因都是脚手架在发布平台发布打包时出错,导致线上应用白屏不可用. 最神奇的是,事后多次 Code Review ...

  4. 用Postman做自动化测试的功能

    自动化测试应该在桌面应用有该功能,在chrome的插件不知道有没有,我也没装chrome版的Postman Postman工具介绍图 上面这张就是Postman的操作界面.一开始我就是这样做简单的数据 ...

  5. <自动化测试方案_1>第一章、为什么要做自动化测试?(Why)

    第一章.为什么要做自动化测试?(Why) 测试的产品分为:桌面程序(C/S).web应用(B/S) 我们的产品是B/S (一)迭代中省去人力测试非新增功能: 在项目中由于测试时间的限制,测试中只能实现 ...

  6. 前端接口自动化测试工具-DOClever使用介绍(转载)

    DOClever 不仅集成了文档编写,团队协作,接口运行,mock 数据等功能,还有两个功能是让我们团队大大的提高工作效率的.一个是接口的自动化生成,可以根据接口数据自动生成文档信息,还有一个便是本文 ...

  7. API接口自动化之3 同一个war包中多个接口做自动化测试

    同一个war包中多个接口做自动化测试 一个接口用一个测试类,每个测试用例如下,比如下面是4个测试用例,每个详细的测试用例中含有请求入参,返回体校验,以此来判断每条测试用例是否通过 一个war包中,若含 ...

  8. 用 shell 脚本做自动化测试

    前言 项目中有一个功能,需要监控本地文件系统的变更,例如文件的增.删.改名.文件数据变动等等.之前只在 windows 上有实现,采用的是 iocp + ReadDirectoryChanges 方案 ...

  9. 做自动化测试选择Python还是Java?

    你好,我是测试蔡坨坨. 今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言. 前言 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发展的 ...

随机推荐

  1. YII框架的行为

    一.什么是行为 行为,也称为 mixins,可以无须改变类继承关系即可增强一个已有的类的功能. 当一个对象或类被注入某些行为后,这个对象可以像访问自己定义的方法和属性一样访问注入进来的方法和属性. 二 ...

  2. ACwing : 798. 差分矩阵

    不得不说之前的差分我真的是掌握的不好.. 一维差分确实简单一看就会,但是学会了之后却并不能灵活的运用. 而二维的差分我甚至还琢磨了很长时间 懒得画图所以没有图..对于二维差分的定义,百度百科是这么说的 ...

  3. MySQL5.7 基础之二

    设计范式: 第一范式:字段是原子性 第二范式:存在可用主键 第三范式:任何表都不应该有依赖于其它表非主键的字段 创建数据库.设计数据表 字段:字段名.数据类型.约束(通过键来实现,而键其实可以当做索引 ...

  4. git 的使用方法以及要注意的地方~

    1.假如你在一个分支,非master分支,例如avatar,在你修改之前一定要 get merge master,git pull,再开始写代码.如果改好了,也要先git merge master,g ...

  5. Image.FromFile 之后无法删除这个文件

    Image.FromFile 之后无法删除这个文件   pictrue图片是从文件加载的,现在想换张图片,更改之前要删除原有的文件,在删除原有的文件出现了异常 string path = @" ...

  6. Android.mk文件LOCAL_MODULE_TAGS 说明

    在移植wireless_tools驱动的时候发现居然没去编译咱的代码,奇怪,后来发现只有LOCAL_MODULE_TAGS 选项这个最有可疑,后来发现有这个说法 LOCAL_MODULE_TAGS : ...

  7. The Matrix | 黑客帝国

    今天又刷了一遍,依旧跟第一次看一样,非常惊叹震撼,同时也发现了更多的细节. 梳理一下情节: 开始就是Trinity在matrix里被黑衣人Agent追杀,Trinity团队的目的是寻找Neo,显然Ag ...

  8. Enhancer | 增强子 专题

    要做就做深做精! Everything needs good justification. The interpretation should be biologically and statisti ...

  9. PrivateIpAddresses Array of String 实例主网卡的内网IP列表。 PublicIpAddresses Array of String 实例主网卡的公网IP列表。 注意:此字段可能返回 null,表示取不到有效值。

    https://cloud.tencent.com/document/api/213/15753 浮动 IP 地址 https://cloud.google.com/solutions/best-pr ...

  10. 000 装docker

    直接参考别人的文章,经过验证,没有问题,需要网络. URL: https://www.cnblogs.com/qgc1995/archive/2018/08/29/9553572.html 我是虚拟机 ...