如何在每个nightwatch测试中跳过登录

5

我的每一个Nightwatch.js测试都需要进行身份验证才能运行,目前我无法通过cookie完成身份验证(当然,如果测试填写用户名和密码,则可以登录,但这样需要时间)

我有一个有效的PHPSESSID(在Fiddler中测试过)cookie,并尝试通过nightwatch setCookie函数设置它,如下所示:

browser
    .setCookie({
        name     : "PHPSESSID",
        value    : "gfnpqlflvlrkd2asj18ja2ewrt",
        path     : "/admin", //(Optional)
        domain   : "example.com", //(Optional)
        secure   : true, //(Optional)
        httpOnly : false // (Optional)           
    })        
    .url("www.example.com/admin")

然而,www.example.com/admin 将我重定向回 www.example.com/login,这意味着身份验证未通过。

是否有任何解决方案?

2个回答

6

我也遇到了这个问题,最后我创建了一个自定义命令。你需要在你的 nightwatch 测试文件夹中创建一个名为 custom-commands 的新文件夹。在你的 nightwatch.JSON 文件中,你需要指定这个文件夹的路径,像这样:

 "custom_commands_path" : "./nightwatch-tests/custom-commands"

在这个新文件夹中创建一个名为登录步骤的新测试文件,并在每个测试的开头使用该名称作为您的新命令。例如,我的文件名为“login.js”,内容如下:
var load_speed = 5000,
local_login_url = "https://";

exports.command = function(username, password) {

  this
    .url(local_login_url)
    .waitForElementVisible('.login', load_speed)
    .setValue('input[type=text]', username)
    .setValue('input[type=password]', password)
    .click('input[type=submit]')
    .pause(load_speed)
    .assert.elementPresent('.dashboard')

  return this;
};

当我在测试中调用自定义命令时,它看起来像这样:
.login(username, password)

如果每次开始新的测试时都调用登录过程,那么这是授权最困难的解决方案。正确的方法是调用一个登录方法来检索认证cookie,并在所有测试之间共享它。 - Alexander Emelianov
1
或者,根据你的测试情况,你可以将这段代码放在测试模块的"before()"块中,这样每组测试只需要登录一次。目前对于我的应用来说,这种方法很有效,因为我们经常测试多个用户和会话数据,并且在某些测试块中登录和退出是可以接受的。 - RoboBear

1
也许你可以使用 "before" 或 "beforeEach" 钩子。

http://nightwatchjs.org/guide#using-before-each-and-after-each-hooks

module.exports = {

  before : function(browser) {
    console.log('before all tests');
  },

  beforeEach : function(browser) {
    console.log('before each test');
  },

  afterEach : function(browser) {

  },

  "test one" : function (browser) {
    browser
     // ...
  },

  "test two" : function (browser) {
    browser
    // ...
      .end();
  }
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接