如何在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