Nightwatch入门指南

发布 : 2019-02-20 分类 : 前端,每天学一点 浏览 :

1.前言

1.1 安装和初始化

大多数情况下,为了执行命令或断言,nightwatch需要向WebDriver服务发起至少两次请求,第一次请求通过css选择器或Xpath表达式确定一个元素的位置,第二次请求才会在元素上执行实际的命令或断言。

安装WebDriver服务可以通过直接下载二进制文件或使用NPM软件包来完成。

可以选择使用Selenium Standalone Server来管理各种浏览器驱动程序和服务,但从Nightwatch 1.0开始不再需要,也不推荐使用,除非您针对旧浏览器(如Internet Explorer)进行测试。

1
2
3
4
5
6
7
{
"webdriver" : {
"start_process": true,
"server_path": "node_modules/.bin/chromedriver",
"port": 9515
}
}

官方教程实在是造成了严重的误导,关键是你安装完chromedriver这个包后,node_modules/.bin/chromedriver目录下面确实有一个chromedriver文件,但是我们需要的是chromedriver.exe文件。

我们可以通过.path属性获取包的安装路径(参考demo-01),也可以手动输入(参考demo-05)。

1
2
3
4
5
6
7
const chromedriver = require('chromedriver');

module.exports = (function(settings) {
settings.test_workers = false;
settings.webdriver.server_path = chromedriver.path;
return settings;
})(require('./nightwatch.json'));

chrome端口号9515

firefox端口号4444,特别说明:firefox需要传入debug参数才能运行,这个坑真是坑死我了😂😂😂。

1
2
3
4
5
6
7
8
9
10
11
{
"webdriver": {
"start_process": true,
"server_path": "./node_modules/geckodriver/geckodriver.exe",
"log_path": "output",
"port": 4444,
"cli_args": [
"--log", "debug"
]
}
}

** window下,firefox 默认寻找路径为C:\Program Files\Mozilla Firefox,如果安装在其它路径,需要指定moz:firefoxOptions属性或者使用--binary PATH命令,告诉geckodriver启动路径。

当你想要关闭测试时,请记住始终调用.end()方法,以便正确关闭浏览器会话。

1.2 before[Each] and after[Each] hooks

在测试中,nightwatch提供标准的before/afterbeforeEach/afterEach的钩子。

beforeafter将分别在执行测试套件之前和之后运行,而beforeEachafterEach分别在每个测试用例之前和之后运行(参见demo4-hooks)。

1.3 Asynchronous hooks

所有before[Each] and after[Each]都可以执行异步操作,只需要将回调函数作为第二个参数传入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
module.exports = {
beforeEach: function(browser, done) {
// 执行一个异步操作
setTimeout(function() {
// 完成异步任务
done();
}, 100);
},

afterEach: function(browser, done) {
// 执行一个异步操作
setTimeout(function() {
// 完成异步任务
done();
}, 200);
}
};

注意:当异步操作完成后,回调函数done必需作为最后一个步骤被调用,否则会导致超时错误。默认的超时时间是10s,可以通过指定asyncHookTimeout属性修改默认超时时间。

2. 运行测试

nightwatch提供命令行的方式来运行测试和生成测试报告,同时提供多种配置选项。

1
nightwatch [source] [options]

2.1 指定测试实例source

除了在nightwatch.json文件中配置src_folders来指定需要进行测试的实例,同样可以在命令行中直接传入测试实例。

1
2
3
4
5
6
7
8
// 测试单个文件
nightwatch tests/one/firstTest.js

// 独立的多个测试
nightwatch tests/one/firstTest.js tests/secondTest.js

// 独立的测试和整个文件夹
nightwatch tests/one/test.js tests/utils

2.2 命令行选项options

名称 简写 默认值 描述
–config -c ./nightwatch.json 指定启动nightwatch的配置文件
–output -o tests_output 指定测试报告的输出路径
–reporter -r junit 预定义报告者的名称或要使用的自定义报告文件的路径。
–env -e default 指定nightwatch的测试环境
–verbose 在会话期间显示扩展的selenium命令日志记录
–version -v 显示版本号
–test -t 指定测试实例
–testcase 只与–test一起使用
–group -g 指定测试组
–skipgroup -s 指定需要跳过的测试组
–filter -f 进行过滤操作
–tag -a 通过标签进行过滤
–skiptags 跳过指定的标签
–retries 重试失败或错误的测试用例达到指定的次数。
–suiteRetries 重试失败或错误的测试套件(测试模块)达到指定的次数。

2.3 Test Environments

你可以定义测试设置的多个环境,以便覆盖每个环境的特定值。

默认default环境是必需的。所有其他环境都是从默认环境继承的,可以根据需要覆盖设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"test_settings" : {
"default" : {
"launch_url" : "http://localhost",
"globals" : {
"myGlobalVar" : "some value",
"otherGlobal" : "some other value"
}
},

"integration" : {
"launch_url" : "http://staging.host",
"globals" : {
"myGlobalVar" : "other value"
}
}
}
}

通过指定--env参数,我们可以选取特定的测试环(参见demo5-env)。

1
nightwatch --env integration

2.4 Test Tags

我们还可以选择性地将测试目标定位为基于标签运行,以便测试可以属于多个标签。

标签可以通过将@tags属性添加到测试模块来完成:

1
2
3
4
5
6
module.exports = {
'@tags': ['login', 'sanity'],
'demo login test': function (browser) {
// test code
}
};

通过命令行对测试标签进行控制:

1
2
3
4
5
6
7
8
// 选择特定标签的测试模块
nightwatch --tag login

// 选择多个标签的测试模块
nightwatch --tag login --tag something_else

// 跳过指定标签
nightwatch --skiptags login

2.5 Disabling Tests

要阻止测试模块运行,只需将该模块中的disabled属性设置为true,如下所示:

1
2
3
4
5
6
7
module.exports = {
'@disabled': true, // 这会阻止测试模块运行

'sample test': function (browser) {
// test code
}
};

3. Page Objects

待续…

https://blog.csdn.net/qq_25324335/article/details/82052509

4. 更多

本文demo源码地址:>>>点我进入

本文作者 : 冰比冰水冰
原文链接 : http://iceiceice.top/2019/02/20/nightwatch/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
留下足迹