量角器设置全局变量

pie*_*ara 21 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;
        });
    });    
});
Run Code Online (Sandbox Code Playgroud)

但这会返回以下错误:

Message:
[firefox #2]      UnknownError: glob is not defined
Run Code Online (Sandbox Code Playgroud)

我也看了这个问题:量角器angularJS全局变量

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

exports.config = {
  ...,
  onPrepare: function () {
      global.glob = 'test';
  }
};
Run Code Online (Sandbox Code Playgroud)

仍然有同样的错误.

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

Mic*_*nov 40

可以在params属性的帮助下从Protractor配置文件中设置全局变量:

exports.config = {
    // ...

    params: {
        glob: 'test'
    }

    // ...
};
Run Code Online (Sandbox Code Playgroud)

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

请参阅参考配置文件.

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

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

更新:

来自以下文档browser.executeScript:

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

因此,在这种情况下JavaScript范围不起作用,传递给的函数browser.executeScript将不具有任何来自规范的闭包变量browser.但是你可以明确地传递这些变量:

browser.executeScript(function (glob) {

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

}, browser.params.glob);
Run Code Online (Sandbox Code Playgroud)


ale*_*cxe 24

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

onPrepare: function () {
    global.myVariable = "test";
},
Run Code Online (Sandbox Code Playgroud)

然后,您将按myVariable原样使用整个测试.

这实际上是如何protractor,browser以及其他内置全局变量都有了全球范围内:

Runner.prototype.setupGlobals_ = function(browser_) {
  // Export protractor to the global namespace to be used in tests.
  global.protractor = protractor;
  global.browser = browser_;
  global.$ = browser_.$;
  global.$$ = browser_.$$;
  global.element = browser_.element;
  global.by = global.By = protractor.By;

  // ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,使用此方法会污染全局范围/命名空间,请注意.