Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 量角器集全局变量_Javascript_Angularjs_Protractor - Fatal编程技术网

Javascript 量角器集全局变量

Javascript 量角器集全局变量,javascript,angularjs,protractor,Javascript,Angularjs,Protractor,我试图在量角器上设置一个全局变量,以便在所有描述块中使用 var glob = 'test'; describe('glob test', function () { it('should set glob', function () { browser.get('http://example.com/test'); browser.executeScript(function () { window.glob = glob;

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

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';
  }
};
不过,还是有同样的错误


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

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

exports.config = {
    // ...

    params: {
        glob: 'test'
    }

    // ...
};
您可以使用
browser.params.glob
在规范中访问它

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

量角器conf.js--params.glob“其他测试”

更新:

从:

如果脚本作为函数对象提供,则该函数将转换为字符串以注入目标窗口。除了脚本之外提供的任何参数都将作为脚本参数包含,并且可以使用arguments对象引用

因此,在这种情况下JavaScript作用域不起作用,您需要传递给
浏览器的函数。executeScript
不会有任何来自规范的闭包变量,如
浏览器
。但您可以显式传递这些变量:

browser.executeScript(function (glob) {

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

}, browser.params.glob);

您还可以使用
global
onPrepare()
中设置全局变量:

onPrepare: function () {
    global.myVariable = "test";
},
然后,您只需在整个测试过程中按原样使用
myVariable

这实际上是
量角器
浏览器
和其他内置全局变量的工作方式:


请注意,使用这种方法会污染全局范围/名称空间,请小心。

我知道回答有点晚,但这里有另一种设置全局变量的方法,可以在整个文件中使用

describe("Some Global most outer describe", function(){
    var glob = "some global variable";
    var blob = "some other global variable";

    it('should test glob', function(){
        expecte(glob).toEqual("some global variable");
    });

    it('should test blob', function(){
        expecte(glob).toEqual("some other global variable");
    });

    describe('Some inner describe', function(){
        //Some other inner tests can also see glob and blob
    });
});

另一种选择是使用过程变量

量角器是一个节点进程。任何节点进程都可以使用自定义节点变量启动。不确定它在windows中是如何实现的(如果您知道如何实现,请发表评论),但对于mac和任何linux/unix操作系统,您都可以

使用如下环境变量启动量角器

MY_VAR=Dev protractor tmp/config.js
然后它将在您的流程中的任何位置,甚至在您的配置中都可用

console.log(process.env.MY_VAR)

我正在尝试,唯一的问题是,如果我尝试在browser.executeScript的回调中获取browser对象,我会得到未知错误:未知错误:未定义浏览器我已为
browser.executeScript
添加了工作解决方案。现在它工作得很好!谢谢你的时间。我已经为此挣扎了一段时间-使用这种方法是有效的,除非我做了类似于
global.foo=require('./foo.js')
where
foo.js
很简单,比如
module.exports='asdf'
glob和blob不能在descripe外部的作用域中使用(“某个全局最外部的descripe”,function()),而是在文件外部声明、初始化并在任何地方使用它们。这与我的示例相同,只是您将变量声明移到了descripe函数中。它不起作用。如果你把其他描述放在最外层的描述中,它就起作用了。我刚才就是这么用的。。。我现在同意这不是最好的解决办法。
console.log(process.env.MY_VAR)