Le rapporteur de définir des variables globales
j'essaie de définir une variable globale sur protractor à utiliser dans tous les blocs de description.
var glob = 'test';
describe('glob test', function () {
it('should set glob', function () {
browser.get('http://example.com/test');
browser.executeScript(function () {
window.glob = glob;
});
});
});
Mais cela me renvoie l'erreur suivante:
Message:
[firefox #2] UnknownError: glob is not defined
j'ai aussi regardé cette question:rapporteur, angularJS variables globales
alors j'ai essayé de mettre la variable glob en conf.js:
exports.config = {
...,
onPrepare: function () {
global.glob = 'test';
}
};
Encore, ayant la même erreur.
Comment puis-je ajouter correctement des variables globales dans les tests de rapporteur?
3 réponses
il est possible de définir des globals à partir du fichier de configuration de Protractor avec l'aide de params
propriété:
exports.config = {
// ...
params: {
glob: 'test'
}
// ...
};
Et vous pouvez y accéder dans les spécifications à l'aide de browser.params.glob
.
voir le fichier de configuration de référence.
l'objet params sera passé directement à L'instance Protractor, et peut être consulté depuis votre navigateur test.params. C'est un objet arbitraire et peut contenir tout ce dont vous avez besoin dans votre test. Cela peut être modifié via la ligne de commande:
protractor conf.js --params.glob 'other test'
mise à Jour:
documentation browser.executeScript
:
si le script est fourni en tant qu'objet de fonction, Cette fonction sera convertie en une chaîne de caractères pour injection dans la fenêtre cible. Tous les arguments fournis en plus du script seront inclus comme arguments de script et peuvent être référencés en utilisant l'objet arguments.
Donc, JavaScript champ d'application dans ce cas ne fonctionne pas, vous fonction qui est passé à browser.executeScript
n'aurez pas de fermeture variables de spec comme browser
. Mais vous pouvez passer ces variables explicitement:
browser.executeScript(function (glob) {
// use passed variables on the page
console.log(glob);
}, browser.params.glob);
vous pouvez aussi définir des variables globales dans onPrepare()
en utilisant global
:
onPrepare: function () {
global.myVariable = "test";
},
alors, vous n'utiliserez que myVariable
tout au long des tests.
C'est en fait comme ça que protractor
,browser
et d'autres variables globales intégrées ont été rendus disponibles à l'échelle mondiale:
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;
// ...
}
notez qu'avec cette approche vous polluez votre espace global scope/Nam, Faites attention.
je sais que je suis un peu en retard pour la réponse mais voici une autre façon de définir les variables globales qui peuvent être utilisées dans tout le fichier
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
});
});