Глобальные переменные
Я пытаюсь установить глобальную переменную на транспортир для использования во всех описываемых блоках.
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
Я также рассмотрел этот вопрос: глобальные переменные углового перемещения транспортировщика
поэтому я попытался установить переменную glob в conf.js следующим образом:
exports.config = {
...,
onPrepare: function () {
global.glob = 'test';
}
};
Тем не менее, с той же ошибкой.
Как я могу добавить правильные глобальные переменные в испытаниях транспортира?
Ответы
Ответ 1
С помощью свойства params
можно установить глобальные значения из конфигурационного файла Protractor:
exports.config = {
// ...
params: {
glob: 'test'
}
// ...
};
И вы можете получить к нему доступ в спецификациях с помощью browser.params.glob
.
См. файл конфигурации ссылок.
Объект params будет передан непосредственно экземпляру Protractor и может быть доступен из вашего теста в качестве browser.params. Это произвольный объект и может содержать все, что вам может понадобиться в вашем тесте. Это можно изменить с помощью командной строки как:
protractor conf.js --params.glob 'other test'
Update:
В docs для browser.executeScript
:
Если script предоставляется как объект функции, эта функция будет преобразована в строку для инъекции в целевое окно. Любые аргументы, предоставленные в дополнение к script, будут включены в качестве аргументов script и могут ссылаться на объект arguments.
Итак, область JavaScript в этом случае не работает, функция, переданная в browser.executeScript
, не будет иметь никаких переменных закрытия из спецификации типа browser
. Но вы можете явно передать эти переменные:
browser.executeScript(function (glob) {
// use passed variables on the page
console.log(glob);
}, browser.params.glob);
Ответ 2
Вы также можете установить глобальные переменные в onPrepare()
с помощью global
:
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;
// ...
}
Обратите внимание, что при таком подходе вы загрязняете свое глобальное пространство/пространство имен, будьте осторожны.
Ответ 3
Я знаю, что немного опоздал на ответ, но вот еще один способ установки глобальных переменных, которые можно использовать во всем файле
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
});
});