如何在nightwatch.js中创建一个全局可访问的变量?我使用一个变量来存储一个自定义的url (取决于我们的在线产品中加载了哪个商店),但我需要它可以跨多个javascript函数访问。它的值似乎在每个函数结束后重置,尽管它是在文件头部的函数外部声明的。
发布于 2015-07-08 00:22:06
你已经有一段时间没有提出你的问题了,对你所请求的内容的支持可能在以前是(本机的)不可用的。现在是了。
在开发人员指南中,提供了两种方法来创建可从任何给定测试访问的全局变量,具体取决于您的需求。请参阅here以获得更好的阅读。
方法1:对于真正的全局,即所有测试和所有环境。在nightwatch.json文件的"globals_path“部分定义一个对象,或传递一个文件。
"globals_path": "./lib/globals.js",
但是,您需要导出变量,因此在Node上刷新是一个好主意。下面是一个基本的globals.js文件示例:
var userNames = {
basicAuth: 'chicken',
clientEmail: 'SaddenedSnail@domain.com',
adminEmail: 'admin@domain.com',
};
module.exports = {
userNames: userNames
}
此对象/文件将用于您的所有测试,无论环境如何,除非您指定了一个不同的文件/对象,如下面的方法2所示。
要访问测试套件中的变量,请使用传递给每个函数( test )的强制浏览器/客户端变量,即:
'Account Log In': function accLogin(client) {
var user = client.globals.userNames.clientEmail;
client
.url(yourUrl)
.waitForElementVisible('yourUserNameField', 1000)
.setValue('yourUserNameField', user)
.end();
}
方法2:用于基于环境的全局变量,它根据您指定的环境而变化。在嵌套在所需环境下的nightwatch.json文件的"globals“部分定义一个对象,或传递一个文件。也就是说。
"test_settings" : {
"default" : {
"launch_url" : "http://localhost",
"selenium_port" : 4444,
"selenium_host" : "localhost",
"globals": {
"myGlobal" : "some_required_global"
}
}
}
请注意,在撰写本文时,nightwatch中似乎有一个bug,因此使用方法2传递文件不起作用(至少在我的环境中是这样)。关于这个bug的更多信息可以在here上找到。
发布于 2015-04-12 03:40:54
为了扩展Tricote的答案,Nightwatch内置了对此的支持。请参阅documentation。
可以在nightwatch.json
文件中将其指定为"globals": {"myvar": "whatever"}
,也可以在使用"globals": "path/to/globals.js"
在nightwatch.json
中引用的globals.js
文件中指定。在后一种情况下,globals.js
可能会:
module.exports = {
myvar: 'whatever'
};
在任何一种情况下,您都可以访问测试中的变量,正如Tricote所提到的:
module.exports = {
"test": function(browser) {
console.log(browser.globals.myvar); // "whatever"
}
};
发布于 2016-03-11 07:07:54
我可能会对此投下反对票,但我已经成功地使用另一个选项来存储和检索对象和数据,那就是将文件作为键值对写入现有文件。
这使我能够在测试运行结束时查看随机创建的任何数据。我在我的第一个测试脚本中使用将用于创建测试的各种帐户的所有数据创建了这个文件。这样,如果我看到一大堆故障,我可以查看文件并查看使用了哪些数据,然后以该用户身份登录并手动转到该位置。
在自定义命令中,我有一个导出以下函数的文件:
saveToFile : function(path, filename, data) {
this.yfs = fs;
buffer = new Buffer(data);
console.log("Note: About to update the configuration with test data" )
fs.open(path, 'w', function(err, fd) {
if (err) {
throw 'error opening file: ' + err;
}
fs.write(fd, buffer, 0, buffer.length, null, function(err) {
if (err) throw 'error writing file: ' + err;
return fs.close(fd, function() {
console.log('File write: ' + path + ' has been updated.' );
})
});
})
},
在这个文件中,'data‘是键值对,比如"username“:"Randy8989@mailinator.com”。因此,如果需要的话,我可以在以后的脚本中使用这些数据。
这是真的,我将立即探索GrayedFox的答案。
https://stackoverflow.com/questions/25067391
复制相似问题