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?

18
demandé sur Community 2015-07-03 12:33:28

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);
37
répondu Michael Radionov 2015-07-03 10:38:28

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.

20
répondu alecxe 2015-07-03 14:00:15

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
    });
});
-4
répondu Haseeb 2016-12-01 20:05:27