/ / Protractor browser.get () не чака приложение за angular5 - ъглово, селен-webdriver, транспортир

Protractor browser.get () не чака приложение за angular5 - ъглово, селен-webdriver, транспортир

В изходния код на транспортиращите устройства: https://github.com/angular/protractor/blob/master/lib/browser.ts

Ще откриете, че broswer.get () изчаква angular1 да завърши bootstrapping преди решаване. Но няма прилагане за ъглово 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.";
}
}

Въпросът, който задавам, е: как транспортирът знае, че страницата (angular5) е приключила зареждането, преди да разреши обещанието? Как иначе мога да се уверя, че страницата приключи зареждането, за да има някаква съгласуваност в моите e2e-тестове.

(Използвам await / async и деактивирах контролния поток, описан тук: https://github.com/angular/protractor/blob/master/docs/control-flow.md , но тъй като обещанието се разрешава без проверка за начално зареждане, мога да изчакам всичко, което искам, то винаги ще бъде проблем с времето

Отговори:

0 за отговор № 1

Проверете транспортирите Очаквани условия

Можете да ги използвате с browser.wait (), след като браузъра ви.

Например:

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

Това ще премине към URL адреса Ви и ще изчака, докато посоченият елемент е налице, преди да продължи, или ще изчака след 15000ms (15sec)