记录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. Processing 中自定义旋转的实现

    一.首先是关键概念在 Processing 中希望处理圆周上的点需要 旋转公式:x = 旋转中心 + 旋转半径 x cos(旋转角度);y = 旋转中心 + 旋转半径 x sin(旋转角度): 用这一 ...

  2. 【概率论】5-10:二维正态分布(The Bivariate Normal Distributions)

    title: [概率论]5-10:二维正态分布(The Bivariate Normal Distributions) categories: - Mathematic - Probability k ...

  3. LAMP企业架构读写分离

    1.1  LAMP企业架构读写分离 LAMP+Discuz+Redis缓解了MYSQL的部分压力,但是如果访问量非常大,Redis缓存中第一次没有缓存数据,会导致MYSQL数据库压力增大,此时可以基于 ...

  4. 记一次有惊无险的 JVM 优化经历

    转载:https://my.oschina.net/u/3627055/blog/2995973 背景 生产环境有二台阿里云服务器,均为同一时期购买的,CPU.内存.硬盘等配置相同.具体配置如下: 节 ...

  5. arcgis python 获得arcgis的版本和安装路径

    import arcpy # Use the dictionary iteritems to iterate through # the key/value pairs from GetInstall ...

  6. Linux创建内存磁盘空间

    mount -t tmpfs -o size=20k tmpfs /var/iot/ 修改 /etc/fstab 启动自动mount tmpfs /var/iot tmpfs defaults,siz ...

  7. SuperWebSocket实现服务端和WebSocket4Net实现客户端

    SuperWebSocket实现服务端和WebSocket4Net实现客户端具体实现如下: SuperWebSocket实现服务端 注:本作者是基于vs2019 enterprise版本,所有项目均为 ...

  8. 修改layui的表单手机、邮箱验证可以为空怎么实现?

      修改layui的表单手机.邮箱验证可以为空   解决办法: 修改源码: 把表单验证源代码(form.js)的正则表达式改一下,例如手机的正则为:/^1d{10}$/,可以改成/^$|^1d{10} ...

  9. 给Oracle字段和表加注释

    给字段加注释 comment on column testtb17.AGE is '年龄';comment on column testtb17.CREATEDTIME is '创建时间';comme ...

  10. 惠普打印机和扫描仪修复医生 HP Print and Scan Doctor

    https://support.hp.com/cn-zh/topic/printscandoctor-printing-problems http://ftp.hp.com/pub/printers/ ...