【问题标题】:Protractor browser.get() doesnt wait for angular5 appProtractor browser.get() 不等待 Angular 5 应用程序
【发布时间】:2018-01-18 15:34:01
【问题描述】:

在量角器源代码中:https://github.com/angular/protractor/blob/master/lib/browser.ts

您会发现 broswer.get() 在求解之前等待 angular1 完成引导。但是 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.';
        }
      }

我要问的问题是:量角器如何知道页面(angular5)在解决承诺之前已经完成加载?我还能如何确保页面完成加载以在我的 e2e 测试中保持某种一致性。

(我正在使用等待/异步并禁用控制流,如下所述: https://github.com/angular/protractor/blob/master/docs/control-flow.md , 但是因为承诺在没有检查引导的情况下解决,我可以等待我想要的一切,这总是一个时间问题)

【问题讨论】:

  • 你有任何在 angular5 中的云端网站,我们可以在哪里尝试?

标签: angular selenium-webdriver protractor


【解决方案1】:

查看量角器Expected Conditions

您可以在 browser.get() 之后将它们与 browser.wait() 一起使用,以强制量角器等待您定义的条件得到满足。

例如:

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

这会转到你的 url,然后等到指定的元素出现后再继续,否则会在 15000 毫秒(15 秒)后超时

【讨论】:

    猜你喜欢
    • 2015-01-28
    • 2019-01-22
    • 1970-01-01
    • 2016-01-23
    • 2018-07-29
    • 2016-04-30
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多