我的每个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
,这意味着身份验证无法通过。
有没有解决方案?
答案 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();
}
};