Using protractor with ng-upgrade
我正在将AngularJS(1.6)应用程序迁移到Angular(4),现在有一个混合应用程序,由NgUpgrade引导。
但是,这似乎完全破坏了我的量角器测试。
Failed: Timed out waiting for asynchronous Angular tasks to finish after 11 seconds. This may be because the current page is not an Angular application. Please see the FAQ for more details: https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular
While waiting for element with locator - Locator: By(css selector, .toggle-summary-button)
混合应用更改
该应用程序似乎运行良好,并且AngularJS和Angular组件均按预期工作。我在引导过程中所做的更改是:
1从html标记中删除了
2添加了AppModules(@NgModule)等
3使用NgUpgrade引导应用程序:
1 2 3 4 5 6 7 8 9 | 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}); }); |
量角器测试
基于以上错误,问题似乎与量角器在等待Angular时所做的事情有关。我有一个beforeEach块,用于加载登录页面,填写详细信息并登录。奇怪的是,它仍在打开该页面并在用户名字段中输入文本,但是随后无法继续进行。
我不明白为什么这会有所不同,而且似乎无济于事,所以任何指导都将受到欢迎!
我尝试过,但没有成功:
- 在我的量角器配置文件中添加" rootElement:'body'"
- 在我的量角器配置文件中添加" ng12Hybrid:true"-我收到一条消息,说它在自动检测到时不再需要它。
-
将
allScriptsTimeout 设置从11000增加到60000,它仍然超时。 -
关闭
waitForAngularEnabled 设置。这解决了登录字段的问题,但是随后我的http模拟都无法正常工作,并且测试失败。
有趣的是,我在15个月前问了关于角度1到角度2的完全相同的问题(+ github)
量角器+混合角度1 + 2应用=失败
没有任何解决方案,我又回到了角度1。今天,我们决定再次尝试像您一样从角度1上升到角度4,并着手解决您的问题,因为我们仍然有完全相同的问题...
好吧,实际上并没有那么有趣……我不明白为什么如此重要的功能会被这样分开。 由于对Angular 2+的重大更改,应该积极维护AngularJs! 有点令人失望(对那些希望得到真实答案的人感到抱歉,如果有更新,我会发布)...
编辑:我去了React
我想出了一个临时解决方案,通过使用以下逻辑覆盖
1 2 3 4 5 6 7 8 9 10 | 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) }; } |