/ / Protractor browser.get () no espera para la aplicación angular5 - angular, selenio-webdriver, transportador

Protractor browser.get () no espera la aplicación angular5 - angular, selenio-webdriver, transportador

En los transportadores de código fuente en: https://github.com/angular/protractor/blob/master/lib/browser.ts

Encontrará que broswer.get () espera a angular1 para finalizar el arranque antes de resolver. Pero no hay implementación para 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 pregunta que estoy preguntando es: ¿Cómo sabe el transportador que la página (angular5) ha terminado de cargarse antes de resolver la promesa? ¿De qué otra manera puedo asegurarme de que la página haya terminado de cargarse para tener algún tipo de consistencia en mis pruebas e2e?

(Estoy usando await / async y deshabilité el flujo de control como se describe aquí: https://github.com/angular/protractor/blob/master/docs/control-flow.md , pero debido a que la promesa se resuelve sin verificación de arranque, puedo esperar todo lo que quiera, siempre será un problema de tiempo)

Respuestas

0 para la respuesta № 1

Echa un vistazo a los transportadores Condiciones esperadas

Puede usarlos con browser.wait () después de su browser.get () para forzar al transportador a esperar hasta que se cumplan las condiciones definidas.

Por ejemplo:

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

Esto irá a su url y luego esperará hasta que el elemento especificado esté presente antes de continuar, o se agotará después de 15000 ms (15 s)