如何创建一个全局可访问的变量?

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传递文件不起作用(至少在我的环境中).有关所述错误的更多信息可以在这里找到.

  • 有机会将此标记为已接受答案@tmacarthur吗?;) (2认同)

vod*_*095 -3

一般来说,这是一种不好的做法,但您可以将其分配为班级字段window

window.someGlobalVar = 'http://example.org/'
Run Code Online (Sandbox Code Playgroud)

并且 window 对象是全局可访问的

  • 在一般情况下,这是正确的。然而,在夜巡中却并非如此。 (2认同)