我正在尝试运行一个简单的Nightwatch.js
测试来登录,告诉表单记住登录,然后测试cookie以查看是否存在布尔值。每次我尝试运行测试时,都会出现错误:
“无法读取'等于'的未定义”
与client.getCookie()
的回调函数相关联。
有人可以帮我理解如何修复此错误吗?
这是我的代码:
module.exports = {
'Test "Keep me logged in." ' : function (client) {
client
.windowMaximize()
.url('www.mysite.com')
.setValue('#login > form > table > tbody > tr:nth-child(1) > td:nth-child(2) > input[type="text"]', 'testuser')
.setValue('#login > form > table > tbody > tr:nth-child(2) > td:nth-child(2) > input[type="password"]', 'testpass')
.click('#login > form > table > tbody > tr:nth-child(4) > td > label > input[type="checkbox"]')
.click('#login > form > table > tbody > tr:nth-child(5) > td > input[type="submit"]')
.waitForElementVisible('body', 2000);
client.getCookie('RememberMe', function(result){
this.assert.equal(result.value, 'True');
});
}
};
答案 0 :(得分:3)
函数是javascript中的词法范围,因此它设置了对关键字this
的新引用。
尝试类似:
client.getCookie('RememberMe', function(result){
this.assert.equal(result.value, 'True');
}.bind(this))
似乎assert
是client
的成员,因此如果框架支持,调用应该类似于
client.getCookie('RememberMe', function(result){
client.assert.equal(result.value, 'True');
})
答案 1 :(得分:1)
根据最新的Nightwatch版本,cookie支持现已原生!
检查文档here。我唯一需要注意的是 - 你确定你真的想要查看字符串值' True&#39 ;?或者您是否要检查布尔值,如下所示:
client.getCookie('RememberMe', function(result){
this.assert.equal(result.value, true);
});
另一些调试建议是,为确保您访问正确的Cookie,请检查.name
。
最后,尝试通过在waitForElementVisible
之后删除分号来链接getCookie命令,以便您的代码如下所示:
.waitForElementVisible('body', 2000)
.getCookie('RememberMe', function(result){
this.assert.equal(result.value, 'True');
});
我不是获得有关JS作用域的建议的最佳人选,但它看起来好像this
的上下文可能是一个嵌套的级别。如果您仍然遇到问题,请尝试将其替换为client
。
运气!
答案 2 :(得分:0)
事实证明,Nightwatch.js尚不支持此功能:https://twitter.com/nightwatchjs/status/434603106442432512