一尘不染

量角器设置全局变量

javascript

我试图在量角器上设置一个全局变量以在所有描述块中使用。

var glob = 'test';

describe('glob test', function () {
    it('should set glob', function () {
        browser.get('http://example.com/test');
        browser.executeScript(function () {
            window.glob = glob;
        });
    });    
});

但这返回了以下错误:

Message:
[firefox #2]      UnknownError: glob is not defined

所以我试图以这种方式在conf.js中设置变量glob:

exports.config = {
  ...,
  onPrepare: function () {
      global.glob = 'test';
  }
};

仍然有相同的错误。

如何在量角器测试中正确添加全局变量?


阅读 308

收藏
2020-05-01

共1个答案

一尘不染

可以借助params属性从量角器配置文件设置全局变量:

exports.config = {
    // ...

    params: {
        glob: 'test'
    }

    // ...
};

您可以使用规范中访问它browser.params.glob

params对象将直接传递到Protractor实例,并且可以从浏览器作为browser.params访问。它是一个任意对象,可以包含测试中可能需要的任何内容。可以通过命令行将其更改为:

protractor conf.js --params.glob 'other test'

如果脚本作为函数对象提供,则该函数将转换为字符串以注入到目标窗口中。除脚本外提供的所有参数都将作为脚本参数包含在内,并且可以使用arguments对象进行引用。

因此,在这种情况下,JavaScript作用域不起作用,您传递给的函数browser.executeScript将不会有来自规范的闭包变量,例如browser。但是您可以显式传递这些变量:

browser.executeScript(function (glob) {

    // use passed variables on the page
    console.log(glob);

}, browser.params.glob);
2020-05-01