すべての記述ブロックで使用する分度器にグローバル変数を設定しようとしています。
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
私もこの質問を見ました: 分度器angleJSグローバル変数
だから私はこの方法でconf.jsの変数globを設定しようとしました:
exports.config = {
...,
onPrepare: function () {
global.glob = 'test';
}
};
それでも、同じエラーが発生します。
分度器テストで適切にグローバル変数を追加するにはどうすればよいですか?
params
プロパティを使用して、Protractorの設定ファイルからグローバルを設定できます。
exports.config = {
// ...
params: {
glob: 'test'
}
// ...
};
また、browser.params.glob
を使用して、仕様でアクセスできます。
参照設定ファイル を参照してください。
ParamsオブジェクトはProtractorインスタンスに直接渡され、テストからbrowser.paramsとしてアクセスできます。これは任意のオブジェクトであり、テストに必要なものをすべて含めることができます。これは、コマンドラインから次のように変更できます。
protractor conf.js --params.glob 'other test'
更新:
docs for browser.executeScript
から:
スクリプトが関数オブジェクトとして提供されている場合、その関数はターゲットウィンドウに挿入するための文字列に変換されます。スクリプトに加えて提供される引数は、スクリプト引数として含まれ、引数オブジェクトを使用して参照できます。
したがって、この場合のJavaScriptスコープは機能しません。browser.executeScript
に渡される関数には、browser
などの仕様からのクロージャー変数がありません。ただし、これらの変数を明示的に渡すことができます。
browser.executeScript(function (glob) {
// use passed variables on the page
console.log(glob);
}, browser.params.glob);
global
を使用して、onPrepare()
でグローバル変数を設定することもできます。
onPrepare: function () {
global.myVariable = "test";
},
次に、テスト全体で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;
// ...
}
このアプローチでは、グローバルスコープ/ネームスペースを汚染することに注意してください。