tma*_*hur 10 javascript nightwatch.js
如何在nightwatch.js中创建一个全局可访问的变量?我正在使用变量来存储自定义网址(取决于我们的在线产品中加载了哪个商店),但我需要它可以通过多个javascript函数访问.看起来它的值在每个函数结束后重置,尽管它被声明在文件头部的函数之外.
Gra*_*Fox 16
已经有一段时间了,因为你问过你的问题并支持你之前可能没有(原生)可用的内容.现在它是.
在开发人员指南中,提供了两种方法,用于根据您的需要创建可从任何给定测试访问的全局变量.请看这里以获得良好的阅读
方法1:对于真正的全局全局变量,即对于所有测试和所有环境.在nightwatch.json文件的"globals_path"部分定义一个对象或传递一个文件,即
"globals_path": "./lib/globals.js",
Run Code Online (Sandbox Code Playgroud)
但是,您需要导出变量,因此在Node上刷新是一个好主意.这是一个基本的globals.js文件示例:
var userNames = {
basicAuth: 'chicken',
clientEmail: 'SaddenedSnail@domain.com',
adminEmail: 'admin@domain.com',
};
module.exports = {
userNames: userNames
}
Run Code Online (Sandbox Code Playgroud)
除非您指定不同的文件/对象,否则此对象/文件将用于所有测试,无论环境如何,如下面的方法2所示.
要从测试套件访问变量,请使用传递给每个函数(测试)的强制浏览器/客户端变量,即:
'Account Log In': function accLogin(client) {
var user = client.globals.userNames.clientEmail;
client
.url(yourUrl)
.waitForElementVisible('yourUserNameField', 1000)
.setValue('yourUserNameField', user)
.end();
}
Run Code Online (Sandbox Code Playgroud)
方法2:对于基于环境的全局变量,它根据您指定的环境而变化.在nightwatch.json文件的"globals"部分定义一个对象或传递一个文件,嵌套在您所需的环境下.即
"test_settings" : {
"default" : {
"launch_url" : "http://localhost",
"selenium_port" : 4444,
"selenium_host" : "localhost",
"globals": {
"myGlobal" : "some_required_global"
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,在撰写本文时,守夜人似乎存在一个错误,因此使用方法2传递文件不起作用(至少在我的环境中).有关所述错误的更多信息可以在这里找到.
vod*_*095 -3
一般来说,这是一种不好的做法,但您可以将其分配为班级字段window。
window.someGlobalVar = 'http://example.org/'
Run Code Online (Sandbox Code Playgroud)
并且 window 对象是全局可访问的