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')
wherefoo.js
很简单,比如module.exports='asdf'
glob和blob不能在descripe外部的作用域中使用(“某个全局最外部的descripe”,function()),而是在文件外部声明、初始化并在任何地方使用它们。这与我的示例相同,只是您将变量声明移到了descripe函数中。它不起作用。如果你把其他描述放在最外层的描述中,它就起作用了。我刚才就是这么用的。。。我现在同意这不是最好的解决办法。
console.log(process.env.MY_VAR)