如何在angular度js应用程序的量angular器中禁用animation

任何人都可以build议我如何在angular度js应用程序中执行量angular器testing时禁用animation。 我已经在我的量angular器configuration文件中添加了下面的代码,但是这并没有帮助我:

var disableNgAnimate = function() { angular.module('disableNgAnimate', []).run(function($animate) { $animate.enabled(false); }); }; browser.addMockModule('disableNgAnimate', disableNgAnimate); 

你可以查看angular度的量angular器configuration: https : //github.com/angular/angular.js/blob/master/protractor-shared-conf.js

您应该将其添加到onPrepare块:

 onPrepare: function() { /* global angular: false, browser: false, jasmine: false */ // Disable animations so e2e tests run more quickly var disableNgAnimate = function() { angular.module('disableNgAnimate', []).run(['$animate', function($animate) { $animate.enabled(false); }]); }; browser.addMockModule('disableNgAnimate', disableNgAnimate); 

我个人在我的“conf.js”文件的“onPrepare”函数中使用下面的代码来禁用Angular / CSSanimation:

 ... onPrepare: function() { var disableNgAnimate = function() { angular .module('disableNgAnimate', []) .run(['$animate', function($animate) { $animate.enabled(false); }]); }; var disableCssAnimate = function() { angular .module('disableCssAnimate', []) .run(function() { var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = '* {' + '-webkit-transition: none !important;' + '-moz-transition: none !important' + '-o-transition: none !important' + '-ms-transition: none !important' + 'transition: none !important' + '}'; document.getElementsByTagName('head')[0].appendChild(style); }); }; browser.addMockModule('disableNgAnimate', disableNgAnimate); browser.addMockModule('disableCssAnimate', disableCssAnimate); } ... 

请注意:我没有写上面的代码,我在网上find它,想方设法加快我自己的testing。

禁用CSSanimation/转换

除了禁用ngAnimation(即element(by.css('body')).allowAnimations(false); ),您可能需要禁用一些通过CSS应用的animation。

我发现这有时会导致一些这样的animation元素,可能看起来像量angular器是'可点击的'(即, EC.elementToBeClickable(btnUiBootstrapModalClose) ),实际上.click()响应EC.elementToBeClickable(btnUiBootstrapModalClose) .click()等。

在我的特殊情况下,我遭受了一个ui.bootstrap模式的转换,而且我并不总是能够可靠地点击它的内部“closures”button。

我发现, 禁用CSSanimation帮助。 我添加了一个类到样式表中:

 .notransition * { -webkit-transition: none !important; -moz-transition: none !important; -o-transition: none !important; -ms-transition: none !important; transition: none !important; } 

…在量angular器中,我有这样的东西:

 _self.disableCssAnimations = function() { return browser.executeScript("document.body.className += ' notransition';"); }; 

可能有一些应用这个概念的方法,但是我发现上面的工作对我来说非常好,除了稳定testing以外,它们还可以更快地运行,因为它们不需要等待animation。

看到这个例子: https : //github.com/angular/protractor/blob/master/spec/basic/elements_spec.js#L123

  it('should export an allowAnimations helper', function() { browser.get('index.html#/animation'); var animationTop = element(by.id('animationTop')); var toggledNode = element(by.id('toggledNode')); // animated toggle // disable animation animationTop.allowAnimations(false); // it should toggle without animation now element(by.id('checkbox')).click(); }); 

@DavidPisoni一见钟情似乎有效。 还有一些你可能想结账的东西

  • 在Protractor 2.0中,如果你正在使用浏览器来处理e2e中常见的东西,你应该返回一个承诺

  • 如果你正在使用angular-bootstrap,有些地方他们不使用$ animate服务,而是通过光秃的javascript应用animation