2014-10-27 9 views
21

Herhangi biri, iletki testlerini yürütürken, açısal js uygulamasındaki animasyonları nasıl devre dışı bırakabileceğimi önerebilir. Benim iletki yapılandırma dosyasında kodunun altına eklemiş ama bu beni yardımcı olmuyor:Açısal js uygulaması için ileticide animasyonlar nasıl devre dışı bırakılır

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

cevap

1

bir örnek için bu bakınız: 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(); 
    }); 
28

Sen açısal en iletki yapılandırmasını kontrol edebilirsiniz: https://github.com/angular/angular.js/blob/master/protractor-shared-conf.js

Sen onPrepare bloğunun altında eklemek gerekir:

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); 
+0

@ user3345216 Bu yanıtı kabul etmek ister misiniz? benim için mükemmel çalışıyor. – manu

+1

Bu benim için çalışmıyor gibi görünüyor. Açısal 1.2.26 ve iletki 2.0.0'ı kullanma.Chrome ve Firefox'ta yayınlanan özellikleri izleyebilir ve animasyonların hepsinin hala ateş ettiğini görebilirsiniz. –

+0

@DavidPisoni İletici 1.8 ile deneyebilir misiniz? Başka bir şey de olabilir, çünkü diğer 2.0 göç ​​sorunlarıyla da karşılaştık. Bir sorunu iletici projeye her zaman bildirebilirsiniz. Durum buysa: https://github.com/angular/protractor/issues – bugdayci

-3

@DavidPisoni İlk görüşte geçerli gibi görünüyor. Hala ödeme isteyebilirsiniz birkaç şey vardır Eğer varsa sen e2e-ortak şeyler

  • gibi tarayıcı ile bir şey yapıyorsun eğer bir söz dönmelidir İletki 2.0

    • açısal-ön yükleme alanı kullanarak onlar servisini animasyon $ kullanmayan yerler vardır ve bunun yerine çıplak javaScript kullanılarak animasyonlar uygulayarak

  • 8

    devre dışı bırakılması CSS Animasyonlar/Geçişler

    ngAnimation özelliğini devre dışı bırakmaya ek olarak (yani, element(by.css('body')).allowAnimations(false);), CSS ile uygulanan bazı animasyonları devre dışı bırakmanız gerekebilir.

    Bu bazen bazı tür animasyon elemanları katkıda bulduk, işte tıklanabilir 'olması iletki görünebilir (yani EC.elementToBeClickable(btnUiBootstrapModalClose)), aslında, benim özel durumda, vb .click() için

    yanıt için İçeri giren ve çıkan bir ui.bootstrap modal ıstırap çekiyordum ve her zaman dahili 'yakın' düğmesini güvenilir bir şekilde tıklayamadım.

    disabling css animations'un yardımcı olduğunu buldum. Bir stil sayfası için bir sınıf ekledi:

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

    ... ve iletki içinde, ben gibi bir şey var:

    _self.disableCssAnimations = function() { 
        return browser.executeScript("document.body.className += ' notransition';"); 
    }; 
    
    Orada bu kavramı uygulanması yağmurluk yolları olabilir, ama bunu buldum olabilir

    Yukarıda benim için çok iyi çalıştı - testlerin stabilize edilmesine ek olarak, animasyonları beklemeden daha hızlı çalışırlar.

    ... 
    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); 
    } 
    ... 
    

    unutmayın::

    +0

    İlginç. Denerim. – VSO

    +2

    Ayrıca bunu bir css'ye ekleyebilir ve yalnızca test ortamında yükleyebilirsiniz. Sadece test ortamını çalıştırırken birkaç senaryo var. browser.executeScript'ler yavaş ve hataya eğilimli olabilir. – bugdayci

    19

    Ben şahsen hem Eğik/CSS animasyonları devre dışı bırakmak için benim 'conf.js' dosyasında "onPrepare" işlevinde aşağıdaki kodu kullanabilirsiniz Yukarıdaki kod yazmadım, Kendi testlerimi hızlandırmanın yollarını ararken çevrimiçi buldum.

    +1

    Harika! Bu bazı garip aralıklı hatalardan kurtuldu. Vaatleri kullanırken bile, uzun tarayıcı uykusuyla önlenebilecek zamanlama problemleri çekiyordum. Bu şeyleri şimdi yıkabilirim! –

    +0

    Bu kodla "ReferenceError: window tanımlı değil" hatasını alıyorum. Herhangi bir fikir neden? – DanielM