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

时间:2015-10-08 12:19:52

标签: nightwatch.js

我的每个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 个答案:

答案 0 :(得分:5)

我也有这个问题,最后创建了一个自定义命令。您需要在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)

答案 1 :(得分:1)

也许你可以使用"之前"或" 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();
  }
};