/ / Protractor browser.get () n'attend pas l'application angular5 - angular, sélénium-webdriver, rapporteur

Navigateur.get () n'attend pas l'application angular5 - angular, sélénium-webdriver, rapporteur

Dans le code source des rapporteurs à: https://github.com/angular/protractor/blob/master/lib/browser.ts

Vous constaterez que broswer.get () attend que angular1 termine l’amorçage avant de résoudre. Mais il n'y a pas d'implémentation pour angular 2+:

        .then((angularVersion) => {
// Load Angular Mocks
if (angularVersion === 1) {
// At this point, Angular will pause for us until angular.resumeBootstrap is called.
let moduleNames: string[] = [];
let modulePromise: wdpromise.Promise<void> = wdpromise.when(null);
for (const {name, script, args} of this.mockModules_) {
moduleNames.push(name);
let executeScriptArgs = [script, msg("add mock module " + name), ...args];
modulePromise = modulePromise.then(
() => this.executeScriptWithDescription.apply(this, executeScriptArgs)
.then(null, (err: Error) => {
throw new Error(
"Error while running module script " + name + ": " + err.message);
}));
}

return modulePromise.then(
() => this.executeScriptWithDescription(
"window.__TESTABILITY__NG1_APP_ROOT_INJECTOR__ = " +
"angular.resumeBootstrap(arguments[0]);",
msg("resume bootstrap"), moduleNames));
} else {
// TODO: support mock modules in Angular2. For now, error if someone
// has tried to use one.
if (this.mockModules_.length > 1) {
throw "Trying to load mock modules on an Angular v2+ app is not yet supported.";
}
}

La question que je me pose est la suivante: comment le rapporteur sait-il que le chargement de la page (angular5) est terminé avant de résoudre la promesse? Sinon, comment puis-je m'assurer que la page a fini de se charger pour avoir une sorte de concistance dans mes e2e-tests.

(J'utilise wait / async et j'ai désactivé le flux de contrôle comme décrit ici: https://github.com/angular/protractor/blob/master/docs/control-flow.md , mais parce que la promesse résout sans vérification le bootstrap, je peux attendre tout ce que je veux, ce sera toujours un problème de timing)

Réponses:

0 pour la réponse № 1

Découvrez les rapporteurs Conditions prévues

Vous pouvez les utiliser avec browser.wait () après votre browser.get () pour forcer le rapporteur à attendre que vos conditions définies soient remplies.

Par exemple:

var EC = protractor.ExpectedConditions;
var timeout = 15000;
browser.get(yourUrl);
browser.wait(EC.presenceOf(yourElement),timeout)

Cela ira à votre URL, puis attendra que l'élément spécifié soit présent avant de continuer, ou expirera après 15000 ms