当我强迫Protractor将应用程序视为常规网页时,测试运行正常.测试运行器正在与应用程序交互并期待一些结果.问题是,我想让Protractor检测Angular,以便在检查’Then’断言之前等待区域稳定.
这是我的protractor.conf.js:
exports.config = { allScriptsTimeout: 30000,capabilities: { browserName: 'chrome',chromeOptions: { args: ['--no-sandBox'] } },directConnect: true,baseUrl: 'http://<ci-server-address>/',specs: [ './e2e/features/*.feature' ],framework: 'custom',frameworkPath: require.resolve('protractor-cucumber-framework'),cucumberOpts: { require: ['./e2e/steps/**/*.ts'],strict: true,format: [ 'json:reports/summary.json' ],dryRun: false,compiler: [] },onPrepare() { browser.ignoreSynchronization = true; require('ts-node').register({ project: 'e2e/tsconfig.e2e.json' }); } };
简而言之 – 测试使用以下配置运行,但是当我删除browser.ignoreSynchronization = true;时,我收到以下错误:超时等待异步Angular任务在30秒后完成.这可能是因为当前页面不是Angular应用程序..
到目前为止我尝试过的事情(没有改进):
>将ng-app添加到< body>标签
>检查window.getAllAngularRootElements() – 正确返回app-root
> checking window.getAllAngularTestabilities() – 返回一个Testability对象
>在Chrome上启动测试(有或没有沙盒)
>在Firefox上启动测试
>尝试部署我们的应用程序的CI服务器和使用ng服务的本地环境
我使用的是最新版本的Protractor,Cucumber,Chai和TypeScript.任何帮助将非常感激.非常感谢你提前!
原因是ZoneJS猴子修补了这些功能,它是在Angular区域的上下文中完成的.当Protractor尝试连接到您的应用程序时,它不再在Angular Zone中运行,因此Protractor将挂起并最终因您收到的错误而超时.
如果我是你,我会看看你的应用程序是否有ZoneJS猴子补丁的任何异步功能.通常,在代码中查找在应用程序区域的上下文之外运行的任何内容.
这是一篇关于ZoneJS的好文章,它不仅可以帮助您理解ZoneJS,还列出了猴子修补的功能Understanding ZoneJS