在量角器源代码中:https://github.com/angular/protractor/blob/master/lib/browser.ts
你会发现 broswer.get(( 在求解之前等待 angular1 完成引导。但是没有角度 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 测试中具有某种一致性。
(我正在使用等待/异步并禁用了此处所述的控制流:https://github.com/angular/protractor/blob/master/docs/control-flow.md ,但是因为承诺在没有检查引导的情况下解决,我可以等待我想要的一切,这永远是一个时间问题(
查看量角器 预期条件
您可以在 browser.get(( 之后将它们与 browser.wait(( 一起使用,以强制量角器等待,直到满足您定义的条件。
例如:
var EC = protractor.ExpectedConditions;
var timeout = 15000;
browser.get(yourUrl);
browser.wait(EC.presenceOf(yourElement),timeout)
这将转到您的 url,然后等到指定的元素存在后再继续,否则它将在 15000 毫秒(15 秒(后超时