向测试添加断言
概述
Nightwatch 提供内置的可扩展 assert
/verify
库,作为包含相同方法的两个命名空间,用于对元素执行断言。
.assert
使用 .assert
命名空间,当断言失败时,测试将结束,因此跳过测试中的所有其他断言。
以下示例代码片段使用 assert
命名空间来断言页面上是否显示具有类 non_existing
的元素。如果断言失败,测试将结束
browser.element.find('selector').assert.visible('.non_existing');
.verify
使用 .verify
命名空间,当断言失败时,测试会记录失败并继续执行测试中的其他断言。
以下示例代码片段使用 verify
命名空间来检查页面上是否显示具有类 non_existing
的元素。如果断言失败,将记录失败,测试将继续
browser.verify.visible('.non_existing');
基本断言
来自 Node.js assert 模块 的方法也适用于 .assert
/.verify
命名空间,可以根据需要使用。
否定 (".not") 断言
从 Nightwatch 版本 1.3 开始,所有断言(包括自定义定义的断言)都具有 ".not"
对应项,可用于断言相反的条件。
elementNotPresent
、cssClassNotPresent
、hidden
等断言已过时且已弃用。以下示例代码片段显示了 ".not"
断言
describe('Demo .not assertion', function() {
it('demo test', function(browser) {
browser.init();
browser
.element.find('.not_present')
.assert.not.elementPresent();
browser
.assert.not.urlContains('http://');
// ...
})
})
自动重试
默认情况下,Nightwatch 会自动重试失败的断言,最长 5000
毫秒。这可以通过在 nightwatch.json
文件中 globals
对象中设置 retryAssertionTimeout
(以毫秒为单位)属性来配置。查看 使用测试全局变量 以了解更多详细信息。
如果达到给定的超时时间,测试运行器将停止重试并将断言标记为失败。
以下示例代码片段显示了在配置文件中定义的 retryAssertionTimeout
属性
{
src_folders: ['tests'],
test_settings: {
default: {
launch_url: 'https://nightwatch.node.org.cn',
globals: {
myGlobalVar: 'some value',
retryAssertionTimeout: 5000
}
}
}
}
期望断言
除了 assert
命名空间之外,Nightwatch API 还开箱即用地支持 BDD 风格的 expect
断言库,这极大地提高了断言的灵活性和可读性。
expect
断言使用来自 Chai 框架 的 Expect
API 的一个子集,目前可用于元素、cookie、页面标题和 URL。
示例
以下是一个使用各种 expect.element([...])
断言的基本示例
module.exports = {
'Demo test Ecosia.org': function (browser) {
browser.url('https://www.ecosia.org/');
// expect element header to be present in 1000ms
expect(browser.element.find('header')).to.be.present.before(1000);
browser.end();
}
};
期望特定元素计数
在此示例中,测试期望页面上存在指定数量的元素,使用 expect.elements([...]).count
断言
module.exports = {
'demo test ecosia.org'(browser) {
browser
.url('https://www.ecosia.org/')
.expect(browser.element.findAll('section').count()).to.equal(5);
},
after(browser) {
browser.end();
}
};
expect
接口为定义断言提供了更加灵活和流畅的语言,比现有的 assert
接口有了很大的改进。唯一的缺点是无法再链接断言。
有关可用 expect
断言的完整列表,请参阅 API 文档。