/ / Transferrator browser.get () não espera pelo aplicativo angular5 - angular, chave de selênio-web, transferidor

Protractor browser.get () não espera pelo app angular5 - angular, selenium-webdriver, transferidor

Nos transferidores, código-fonte em: https://github.com/angular/protractor/blob/master/lib/browser.ts

Você verá que broswer.get () aguarda o angular1 concluir a inicialização antes de resolver. Mas não há implementação para o 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.";
}
}

A pergunta que estou fazendo é: como o transferidor sabe que a página (angular5) terminou de carregar antes de resolver a promessa? De que outra forma posso garantir que a página terminou de carregar para ter algum tipo de consistência nos meus testes e2e.

(Estou usando wait / async e desabilitei o fluxo de controle conforme descrito aqui: https://github.com/angular/protractor/blob/master/docs/control-flow.md , mas como a promessa é resolvida sem verificação de bootstrap, posso esperar tudo o que quero, sempre será um problema de tempo)

Respostas:

0 para resposta № 1

Confira transferidores Condições esperadas

Você pode usá-los com browser.wait () após o browser.get () para forçar o transferidor a esperar até que as condições definidas sejam atendidas.

Por exemplo:

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

Isso irá para o seu URL e, em seguida, aguarde até que o elemento especificado esteja presente antes de continuar ou o tempo limite será excedido após 15000 ms (15 s)