4

我正在将我的 AngularJS (1.6) 应用程序迁移到 Angular (4),现在有一个混合应用程序,由 NgUpgrade 引导。

但是,这似乎完全破坏了我的量角器测试。

失败:等待异步 Angular 任务在 11 秒后完成超时。这可能是因为当前页面不是 Angular 应用程序。有关更多详细信息,请参阅常见问题解答:https ://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular

在等待带有定位器的元素时 - 定位器:By(css selector, .toggle-summary-button)

混合应用程序更改

该应用程序似乎运行良好,AngularJS 和 Angular 组件都按预期工作。我在引导过程中所做的更改是:

ng-app1从 html 标记中删除:

<html lang="en" *ng-app="myapp">

2 添加了一个 AppModules (@NgModule) 等。

3 使用 NgUpgrade 引导应用程序:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import { UpgradeModule } from '@angular/upgrade/static';
import { AppModule } from './app.module';

platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => {
  const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule;
  upgrade.bootstrap(document.body, ['myapp'], {strictDi: true});
});

量角器测试

基于上述错误,问题似乎与 Protractor 在等待 Angular 时所做的任何事情有关。我有一个 beforeEach 块,它加载登录页面,填写详细信息并登录。奇怪的是它仍在打开页面并在用户名字段中输入文本,但随后它无法继续前进。

我不明白为什么这有什么不同,而且周围的任何改变似乎都没有帮助,所以任何指导都将受到欢迎!

我试过了,没有成功:

  • 将“rootElement:'body'”添加到我的量角器配置文件中
  • 在我的量角器配置文件中添加“ng12Hybrid:true” - 我收到一条消息,说它不再需要它,因为它会自动检测到。
  • allScriptsTimeout设置从 11000 增加到 60000 并且仍然超时。
  • 关闭waitForAngularEnabled设置。这解决了登录字段的问题,但是我的 http 模拟都不起作用并且测试失败。
4

2 回答 2

6

有趣的是,我在 15 个月前就角度 1 到角度 2 提出了完全相同的问题 (+github):

量角器 + 混合 Angular 1+2 应用程序 = 失败

在没有任何解决方案的情况下,我回滚到角度 1。今天我们决定再次尝试像您一样从角度 1 上升到 4,并提出您的问题,因为我们仍然有完全相同的问题......

好吧,实际上并不那么好笑……我不明白为什么这么重要的功能会被这样分开。由于对 Angular 2+ 的重大更改,AngularJs 应该得到积极维护!这有点令人失望(对于那些期待真正答案的人感到抱歉,如果有更新我会发布)......

编辑:我去了 React

于 2017-06-04T17:27:23.790 回答
0

我想出了一个临时技巧来解决这个问题,方法是waitForAngular用下面的逻辑覆盖函数。

onPrepare: function() {
            
            var script = "var callback = arguments[arguments.length - 1];" +
                "angular.element(document.querySelector(\"body\")).injector()"+
                ".get(\"$browser\").notifyWhenNoOutstandingRequests(callback)");

            browser.waitForAngular = function() {
                return browser.executeAsyncScript(script)
            };
}
于 2020-07-06T13:36:53.080 回答