Quelqu'un peut-il me suggérer comment désactiver les animations dans l'application angular js lors de l'exécution des tests du rapporteur. J'ai ajouté ci-dessous du code dans mon fichier de configuration du rapporteur mais cela ne m'aide pas:
var disableNgAnimate = function() {
angular.module('disableNgAnimate', []).run(function($animate) {
$animate.enabled(false);
});
};
browser.addMockModule('disableNgAnimate', disableNgAnimate);
Vous pouvez vérifier la configuration du rapporteur de l'angulaire: https://github.com/angular/angular.js/blob/master/protractor-shared-conf.js
Vous devez l'ajouter sous le bloc 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);
J'utilise personnellement le code suivant dans la fonction "onPrepare" de mon fichier "conf.js" pour désactiver les deux animations angulaires/CSS:
...
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);
}
...
Attention: je n'ai pas écrit le code ci-dessus, je l'ai trouvé en ligne en cherchant des moyens d'accélérer mes propres tests.
En plus de désactiver ngAnimation (c'est-à-dire element(by.css('body')).allowAnimations(false);
), vous devrez peut-être désactiver certaines animations qui ont été appliquées via CSS.
J'ai trouvé que cela contribue parfois à certains de ces éléments animés, qui peuvent apparaître à Protractor comme "cliquables" (c'est-à-dire EC.elementToBeClickable(btnUiBootstrapModalClose)
), pour ne pas répondre réellement à .click()
, etc.
Dans mon cas particulier, je souffrais d'un modal ui.bootstrap qui faisait la transition vers l'intérieur et vers l'extérieur, et je n'étais pas toujours en mesure d'obtenir son bouton de fermeture interne de manière fiable.
J'ai trouvé que désactivation des animations CSS aidé. J'ai ajouté une classe à une feuille de style:
.notransition * {
-webkit-transition: none !important;
-moz-transition: none !important;
-o-transition: none !important;
-ms-transition: none !important;
transition: none !important;
}
... et en rapporteur, j'ai quelque chose comme:
_self.disableCssAnimations = function() {
return browser.executeScript("document.body.className += ' notransition';");
};
Il y a peut-être des façons plus astucieuses d'appliquer ce concept, mais j'ai trouvé que ce qui précède fonctionnait très bien pour moi - en plus de stabiliser les tests, ils fonctionnent plus rapidement car ils n'attendent pas d'animations.
Voir ceci pour un exemple: https://github.com/angular/protractor/blob/master/spec/basic/elements_spec.js#L12
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();
});