存储JavaScript变量以便从Nightwatch测试中轻松访问的最佳位置?

时间:2018-05-31 09:58:36

标签: javascript nightwatch.js browserstack

我正在编写一个javascript库,当某些事件发生时,我想存储一个可以从NightwatchJs测试中访问的JSON变量,以验证事件生成的数据。

我曾经将它存储为全局变量(例如 window.debugLog = { message: "something", timestamp: 1111, eventType: "click", other: "stuff" };

并使用

在nightwatch中检索它
browser.execute("return window.debugLog;", [], function(result){ debugLog = result.value;})

不幸的是,当我在Browserstack上运行Nightwatch测试时,每个浏览器/设备似乎都不可靠。由于Appium无法执行Js功能,因此误报并不罕见。

我想知道是否有人对更可靠的替代品有任何建议。一块饼干?元标记?一个隐藏的标签?

1 个答案:

答案 0 :(得分:0)

将其写入文件,将该文件用于以后使用它的测试。

我在custom_commands文件夹中有一个名为helperFunctions.js的文件,在其中,这是一个更有用的函数/方法:

saveToFile : function(client, path, data) {
    this.fs = fs;

    buffer = new Buffer(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.' );
            })
        });
    })
},

通过这种方式,可以调用它来从任何测试中写入数据:

this.helperFunctions.saveToFile(client, "conf/usefulVariable.js", "module.exports = {\"default\" : {},\"test_env\" : { myGlobal: " + someGlobal + "}};")

在需要使用它的测试文件中:

var usefulVar = require("../conf/usefulVariable.js");

您可能需要/想要JSON.stringify或根据需要进行解析。