API

Nightwatch的API分为四个部分

1.Expect

在browser实例上以.expect.element开头的BDD(行为驱动测试)风格的接口,0.7及以上版本nightwatch可用。通过.element方法传入一个selector(参考querySelector或者jq的语法)获取到dom实例,通过.text、.value、.attribute等方法获取到实例属性。还有一些语意明确的修饰: 
- to 
- be 
- been 
- is 
- that 
- which 
- and 
- has 
- with 
- at 
- does 
- of 
再加上比较判断:

.equal(value)/.contain(value)/.match(regex)

.selected

.present

还有时间修饰.before(ms)(表示一段时间之内)、.after(ms)(表示一段时间之后)。就像造句一样:某某元素的某某属性(在某某时间)(不)等于什么值,这就是BDD风格的测试代码。例如:

this.demoTest = function (browser) {
browser.expect.element('body').to.have.attribute('data-attr');
browser.expect.element('body').to.not.have.attribute('data-attr');
browser.expect.element('body').to.not.have.attribute('data-attr', 'Testing if body does not have data-attr');
browser.expect.element('body').to.have.attribute('data-attr').before(100);
browser.expect.element('body').to.have.attribute('data-attr')
.equals('some attribute');
browser.expect.element('body').to.have.attribute('data-attr')
.not.equals('other attribute');
browser.expect.element('body').to.have.attribute('data-attr')
.which.contains('something');
browser.expect.element('body').to.have.attribute('data-attr')
.which.matches(/^something\ else/);
};

  

2.Assert

以.assert/.verify开头的两套相同的方法库,区别是assert如果断言失败则退出整个测试用例所有步,verify则打印后继续进行。

this.demoTest = function (browser) {
browser.verify.title("Nightwatch.js");
browser.assert.title("Nightwatch.js");
};

  

有如下判断方法:

.attributeContains(selector, attribute, expected[, message])
检查指定元素(selector)的指定属性(attribute)是否包含有期待的值(expected)打印出指定信息(可选填的message)其他方法讲解类似,不一一赘述 .attributeEquals(selector, attribute, expected[, message])
检查元素指定属性是否等于预期 .containText(selector, expectedText[, message])
包含有指定的文本 .cssClassPresent(selector, className[, message])
检查元素指定class是否存在 .cssClassNotPresent(selector, className[, message])
检查元素指定class是否不存在 .cssProperty(selector, cssProperty, expected[, message])
检查元素指定css属性的值是否等于预期 .elementPresent(selector[, message)
检查指定元素是否存在于DOM中 .elementNotPresent(selector[, message)
检查指定元素是否不存在于DOM中 .hidden(selector[, message)
检查指定元素是否不可见 .title(expected[, message])
检查页面标题是否等于预期 .urlContains(expectedText[, message])
检查当前URL是否包含预期的值 .urlEquals(expected[, message])
检查当前URL是否等于预期的值 .value(selector, expectedText[, message])
检查指定元素的value是否等于预期 .valueContains(selector, expectedText[, message])
检查指定元素的value是否包含预期的值 .visible(selector[, message)
检查指定元素是否可见

3.Commands

很多命令的读写,可以操作BOM、DOM对象:

.clearValue(selector[, message])
清空input、textarea的值 .click(selector[, callback])
callback为执行完命令后需要执行的回调 .closeWindow([callback]) .deleteCookie(cookieName[, callback]) .deleteCookies([callback]) .end([callback])
结束会话(关闭窗口) .getAttribute(selector, attribute, callback) .getCookie(cookieName, callback) .getCookies(callback) .getCssProperty(selector, cssProperty, callback) .getElementSize(selector, callback) .getLocation(selector, callback) .getLocationInView(selector, callback) .getLog(typeString, callback)
获取selenium的log,其中type为string或者function .getLogTypes(callback) .getTagName(selector, callback) .getText(selector, callback) .getTitle(callback) .getValue(selector, callback) .init([url])
url方法的别名,如果不传url则跳转到配置中的launch_url .injectScript(scriptUrl[, id, callback])
注入script .isLogAvailable(typeString, callback)
typeString为string或者function,用来测试log的type是否可用 .isVisible(selector, callback) .maximizeWindow([callback])
最大化当前窗口 .moveToElement(selector, xoffset, yoffset[, callback])
移动鼠标到相对于指定元素的指定位置 .pause(ms[, callback])
暂停指定的时间,如果没有时间,则无限暂停 .perform(callback)
一个简单的命令,允许在回调中访问api .resizeWindow(width, height[, callback])
调整窗口的尺寸 .saveScreenshot(fileName, callback) .setCookie(cookie[, callback]) .setValue(selector, inputValue[, callback]) .setWindowPosition(offsetX, offsetY[, callback]) .submitForm(selector[, callback]) .switchWindow(handleOrName[, callback]) .urlHash(hash) .useCss()
设置当前选择器模式为CSS .useXpath()
设置当前选择器模式为Xpath .waitForElementNotPresent(selector, time[, abortOnFailure, callback, message])
指定元素指定时间内是否不存在 .waitForElementNotVisible(selector, time[, abortOnFailure, callback, message])
指定元素指定时间内是否不可见 .waitForElementPresent(selector, time[, abortOnFailure, callback, message]) .waitForElementVisible(selector, time[, abortOnFailure, callback, message])

简单的例子:

this.demoTest = function (browser) {
browser.click("#main ul li a.first", function(response) {
this.assert.ok(browser === this, "Check if the context is right.");
this.assert.ok(typeof response == "object", "We got a response object.");
});
};

  

4.webdriver protocol

可以操作一些更底层的东西,比如: 
- Sessions 
- Navigation 
- Command Contexts 
- Elements 
- Element State 
- Element Interaction 
- Element Location 
- Document Handling 
- Cookies 
- User Actions 
- User Prompts 
- Screen Capture 
- Mobile Related

简单的例子:

module.exports = {
'demo Test' : function(browser) {
browser.element('css selector', 'body', function(res) {
console.log(res)
});
}
};

  

拓展

也可以单独使用chromedriver等进行单一平台测试,效率更高,测试更快。只需要npm安装chromedriver或者其他webdriver,不需要selenium,在selenium设置中把selenium进程设置为false,测试环境配置中做出相应的改变。在golobal_path设置的配置文件中,利用nightwatch测试的全局before和after钩子中开、关服务器就好:

var chromedriver = require('chromedriver');

function startChromeDriver() {
chromedriver.start();
} function stopChromeDriver() {
chromedriver.stop();
} module.exports = {
before : function(done) {
startChromeDriver.call(this);
done();
}, after : function(done) {
stopChromeDriver.call(this);
done();
}
};

  

nightwatch-helpers

nightwatch-helpers

Custom assertions and commands for easier Nightwatch tests.

Usage

npm install nightwatch-helpers --save-dev

In your Nightwatch config:

{
"custom_commands_path": ["node_modules/nightwatch-helpers/commands"],
"custom_assertions_path": ["node_modules/nightwatch-helpers/assertions"]
}

What's Included

Assertions

  • count(selector, count)

  • attributePresent(selector, attr)

  • evaluate(fn, [args], [message])

  • checked(selector, expected)

  • focused(selector, expected)

  • hasHTML(selector, html)

  • notVisible(selector)

Commands

  • dblClick(selector)

  • waitFor(duration)

  • trigger(selector, event, [keyCode])

  • enterValue(selector, value)

只需要在图中位置配置一下即可

其他

推荐使用Headless测试即不打开浏览器可视界面以便能跑在服务器上。比如Phantomjs可以模拟webkit内核浏览器的行为,在Nightwatch中配置一下Phantomjs环境即可,启动nightwatch时使用–env加上配置里的环境名激活对应的环境。如今(59版本以上)Phantomjs已经停止维护,使用Chrome自带的headless模式是更好的选择。也可以使用Puppeteer来做E2E测试,好处是只依赖一个Puppeteer,并且API相对简单

nightwatch API的更多相关文章

  1. karma + phantom + mocha + sion + chai + nightwatch + selenium2(webdriver) 测试框架学习

    第三方的教程传送门 https://segmentfault.com/a/1190000004558796 karma # github https://github.com/karma-runner ...

  2. Nightwatch——自动化测试(端对端e2e)

    背景: 前端页面模拟仿真操作,目的是避免每次更新相关内容重复之前的测试操作,减少不必要的时间投入,以及校验功能的可用性.但是目前元素定位是个问题(每次页面有修改都要重设某些元素定位) 测试分类: 一. ...

  3. Nightwatch.js – 轻松实现浏览器的自动测试

    Nightwatch.js 是一个易于使用的,基于 Node.js 平台的浏览器自动化测试解决方案.它使用强大的 Selenium WebDriver API 来在 DOM 元素上执行命令和断言. 语 ...

  4. NightWatch端到端测试

    NightWatch http://nightwatchjs.org/ Nightwatch.js Browser automated testing done easy. Write End-to- ...

  5. 脚手架vue-cli系列五:基于Nightwatch的端到端测试环境

    不同公司和组织之间的测试效率迥异.在这个富交互和响应式处理随处可见的时代,很多组织都使用敏捷的方式来开发应用,因此测试自动化也成为软件项目的必备部分.测试自动化意味着使用软件工具来反复运行项目中的测试 ...

  6. 使用Nightwatch.js做基于浏览器的web应用自动测试

    1        安装 1.1   安装Node.js 在http://nodejs.org/ 上下载适合本机系统的安装包运行安装,注意安装选项中选择npm tool以用于后续依赖包的安装. 1.2  ...

  7. Selenium + Nightwatch 自动化测试环境搭建

    首先要安装 Java 7 或更高 ,(http://www.oracle.com/technetwork/java/javase/downloads/index.html) 并且 java 命令可正常 ...

  8. nightwatch 基于Webdriver的端到端自动化测试框架

    nightwatch 是使用nodejs编写的,基于Webdriver api 的端到端自动化测试框架 包含以下特性 清晰的语法,基于js 以及css 还有xpath 的选择器 内置测试runner, ...

  9. nightwatch对前端做自动化测试

    记录node环境使用nightwatch.selenium-server.chromedriver对部署后的前端页面进行自动化测试的项目搭建过程. 1.目标 能对部署后的前端项目进行自动化测试,能自动 ...

随机推荐

  1. linux题目整理(一)

    1.Linux如何挂载windows下的共享目录? mount.cifs /IP地址/server/ /mnt/server -O user=administrator password=yourpa ...

  2. [loj#101] 最大流 网络流模板

    #101. 最大流 内存限制:512 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 这是一道模板题. 给定  ...

  3. EL的函数与标签

    1 什么EL函数库 EL函数库是由第三方对EL的扩展,我们现在学习的EL函数库是由JSTL添加的.下面我们会学习JSTL标签库. EL函数库就是定义一些有返回值的静态方法.然后通过EL语言来调用它们! ...

  4. Python的支持工具[0] -> 环境包管理工具[1] -> Anaconda

    Anaconda包管理工具 / Anaconda Package Management Tools Anaconda is the world’s most popular Python data s ...

  5. ACdream1032(树形DP)

    ACdream1032 题意 给出一棵树,每个节点有权值,问由 \(1\) ~ \(n\) 个节点组成的树块的权值和的最小值. 分析 首先发现 \(n\) 很小,那么我们可以开一个二维数组 \(dp[ ...

  6. Codeforces 1027F. Session in BSU

    题目直通车:Codeforces 1027F. Session in BSU 思路: 对第一门考试,使用前一个时间,做标记,表示该时间已经用过,并让第一个时间指向第二个时间,表示,若之后的考试时间和当 ...

  7. ELK获取用户真实IP

    原理:在filebeat这台服务器上的nginx中获取到客户端真实IP($clientRealIp),    然后在访问日志中添加"$clientRealIp"字段.1. 通过ma ...

  8. Flash3D学习计划(一)——3D渲染的一般管线流程

    一:什么是渲染管线 渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的并行处理单元.一个流水线是一序列可以并行和按照固定顺序进行的阶段.每个阶段都从它的前一阶段接收输入,然后把输出发给随后 ...

  9. vim常用操作之复制剪切粘贴,注释取消注释,多行缩进等

    进入vim按下v键,选择要操作的对象 按下y复制,d剪切,p粘贴 >缩进,<取消缩进 按下esc退出操作 按下ctrl+v,选择要操作对象, 按下大写I,写入注释符号,按下d取消注释 按下 ...

  10. Unable to list target platforms. Please make sure the android sdk path is correct. See the Console for more details.

    在android上发布遇到 androidSDK无法找到的问题 http://www.jianshu.com/p/fe4c334ee9fe