web-dev-qa-db-fra.com

Accéder à la portée de l'objet / navigateur de la fenêtre depuis le rapporteur

J'exécute des tests avec rapporteur, mais il semble impossible d'accéder à l'objet "fenêtre" de JS. J'ai même essayé d'ajouter une balise dans mon fichier html qui contiendrait quelque chose comme

var a = window.location;

et puis essayez expect (a) mais je n'ai pas pu le faire fonctionner, j'ai toujours des références indéfinies ...

Comment dois-je procéder pour accéder aux variables qui sont dans la portée du navigateur?

21
hilnius

En supposant que vous utilisez une version récente de Protractor, disons> = 1.1.0, espérons-le> = 1.3.1

Tenter d'accéder au code JS côté navigateur directement depuis Protractor ne fonctionnera pas car Protractor s'exécute dans NodeJS et chaque code côté navigateur est exécuté via Selenium JsonWireProtocol .

Sans plus de détails, un exemple pratique:

browser.get('https://angularjs.org/');

One-liner promet que, à partir d'aujourd'hui, se résout à '1.3.0-rc.3'

browser.executeScript('return window.angular.version.full;');

Vous pouvez l'utiliser directement dans une instruction expect, étant donné que l'attente de Protractor résout les promesses pour vous:

expect(browser.executeScript('return window.angular.version.full;')).
  toEqual('1.3.0-rc.3');

Exemple plus long passant une fonction au lieu d'une chaîne plus sans expect résoudre la promesse pour vous. c'est-à-dire pour plus de contrôle et pour faire quelque chose de fantaisiste avec le résultat.

browser.driver.executeScript(function() {
    return window.angular.version.full;
}).then(function(result) {
    console.log('NodeJS-side console log result: ' + result);
    //=> NodeJS-side console log result: 1.3.0-rc.3
});
26
Leo Gallucci