NIghtwatch.js错误:“无法读取未定义

时间:2015-06-11 19:30:17

标签: javascript nightwatch.js

我正在尝试运行一个简单的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');
      });
  }
};

3 个答案:

答案 0 :(得分:3)

函数是javascript中的词法范围,因此它设置了对关键字this的新引用。

尝试类似:

  client.getCookie('RememberMe', function(result){ 
      this.assert.equal(result.value, 'True');
  }.bind(this))

编辑:

似乎assertclient的成员,因此如果框架支持,调用应该类似于

  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