记录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. 39、Parquet数据源之自动分区推断&合并元数据

    一.自动分区推断 1.概述 表分区是一种常见的优化方式,比如Hive中就提供了表分区的特性.在一个分区表中,不同分区的数据通常存储在不同的目录中, 分区列的值通常就包含在了分区目录的目录名中.Spar ...

  2. Mybatis 代码生成器(集成通用Mapper)

    0.确保通用Mapper被正确配置 1.pom.xml追加 <properties> <targetJavaProject>${basedir}/src/main/java&l ...

  3. P5024 保卫王国(动态dp/整体dp/倍增dp)

    做法(倍增) 最好写的一种 以下0为不选,1为选 \(f_{i,0/1}\)为\(i\)子树的最小值,\(g_{i,0/1}\)为除i子树外的最小值 \(fh_{i,j,0/1,0/1}\)为确定\( ...

  4. Java 基础:Queue

    下面几个关于Java里queue的说法哪些是正确的()? 正确答案: A C A.LinkedBlockingQueue是一个可选有界队列,不允许null值 B.PriorityQueue,Linke ...

  5. C++多重继承分析——《虚继承实现原理(虚继承和虚函数)》

    博客转载:https://blog.csdn.net/longlovefilm/article/details/80558879 一.虚继承和虚函数概念区分 虚继承和虚函数是完全无相关的两个概念. 虚 ...

  6. Java 线程之间的通讯,等待唤醒机制

    public class ThreadNotifySample { public static void main(String[] args) { // Res res = new Res(); / ...

  7. Pycharm中直接安装第三方库

    1.点File->Settings 2.在project interpreter(项目解释器)中点击“+”号 3.输入第三方库进行查询,并安排 4.安装成功

  8. 值得H5前端学习的60个JS插件(含DEMO演示)

    下面也可以说是H5前端学习的js插件大全.基本包含了大部分的前端最前沿的js插件和库. 布局 SuperEmbed.js- 是一个Javascript库,可检测出网页上的内嵌视频并使他们能够变成响应式 ...

  9. JVM常量的含义与反编译助记符详解

    1.定义一个常量 public class MyTest2 { public static void main(String[] args) { System.out.println(MyParent ...

  10. Spring Boot TImer Schedule Quartz

    Spring Boot 2.X(十二):定时任务-云栖社区-阿里云https://yq.aliyun.com/articles/723876?spm=a2c4e.11155472.0.0.2f8b3a ...