2016-03-21 16 views
4

Bu açılır benim popover geçerli:İletki, bir popover'ın görünmesini ve boş bir dizenin bulunup bulunmadığını kontrol etmeyi nasıl bekleyebilir? fareyle konunun üzerine bir kez

enter image description here

Bu html böyle görünüyor popover DOM eklenir önce :

<span 
    tariff-popover="popover.car2go.airport" 
    class="ng-isolate-scope"> 
    <span ng-transclude=""> 
     <span class="ng-binding ng-scope"> 
      Airport Fee 
     </span> 
    </span> 
    &nbsp; 
    <span 
     popover-placement="right" 
     uib-popover-html="text" 
     popover-trigger="mouseenter" 
     class="fa fa-info-circle"> 
    </span> 
</span> 

budur sonra popover görülebilir:

<span 
    tariff-popover="popover.car2go.airport" 
    class="ng-isolate-scope"> 
    <span ng-transclude=""> 
     <span class="ng-binding ng-scope"> 
      Airport Fee 
     </span> 
    </span> 
    &nbsp; 
    <span 
     popover-placement="right" 
     uib-popover-html="text" 
     popover-trigger="mouseenter" 
     class="fa fa-info-circle"> 
    </span> 
    <div 
     tooltip-animation-class="fade" 
     uib-tooltip-classes="" 
     ng-class="{ in: isOpen() }" 
     uib-popover-html-popup="" 
     title="" 
     content-exp="contentExp()" 
     placement="right" 
     popup-class="" 
     animation="animation" 
     is-open="isOpen" 
     origin-scope="origScope" 
     style="visibility: visible; display: block; top: -41px; left: 108.984px;" 
     class="ng-isolate-scope right fade popover in"> 
     <div class="arrow"> 
     </div> 
     <div class="popover-inner"> 
      <!-- ngIf: title --> 
      <div 
       class="popover-content ng-binding" 
       ng-bind-html="contentExp()"> 
       4,90€ for all rides to and from the airport 
      </div> 
     </div> 
    </div> 
</span> 

Metnin boş olup olmadığını test etmek istiyorum. Testimde, 4,90€ for all rides to and from the airport gibi bir dizi olduğunu kontrol ediyorum. Bu dize boş olmamalıdır.

Bu eleman boş değil ve tarayıcı önce check ne kadar beklemesi gerektiğini eğer regex ile benim iletki-conf parçası kontrol etmektir:

:

params: { 
    regexNotEmpty: '^(?!\s*$).+', 
    sleepTimeout: 1000 
}, 

Bu benim iletki testidir

describe('car2go test all input fields and checkboxes', function() { 
    beforeEach(function() { 
    browser.get('http://localhost:9999/#/car2go'); 
    browser.waitForAngular(); 
    }); 

    it('should display the popover-content on mouseover', function() { 
    var path = 'span[tariff-popover="popover.car2go.airport"]'; 
    var pathIcon = path + ' > .fa.fa-info-circle'; 
    var pathPopover = path + ' > .popover.ng-isolate-scope.right.fade.in'; 

    var popoverIcon = element(by.css(pathIcon)); 
    browser.actions().mouseMove(popoverIcon).perform(); 
    var popover = element(by.css(pathPopover)); 

    expect(popover.isDisplayed()).toBeTruthy(); 
    browser.sleep(browser.params.sleepTimeout); 
    expect(popover.getText()).toMatch(browser.params.regexNotEmpty); 
    }); 
}); 

i simgesinin üzerine geliyorum ve popover görünüp görünmediğini kontrol ediyorum. Sorun değil. Sonra popover tam olarak yüklenene kadar 1 saniye beklemek zorundayım ve boş olmadığını kontrol edebilirim.

Bu yaklaşımdaki sorun, çoğunlukla Chrome'da çalışıyor, ancak Firefox'ta daha yavaş çalışıyor. Test bir söze nasıl benzer bir şekilde yapılabilir? İletki 5 saniye kadar bekleyebilir ve metin yoksa, testi başarısızlık olarak işaretleyebilir mi?

cevap

3

İletki 5 saniye kadar bekleyebilir ve metin yoksa, sınama başarısız mı olarak işaretlenir?

browser.wait()'un tamamı budur. Ayrıca, browser.sleep()'u kullanmanın aksine genellikle önerilir. "browser.sleep() kullanmayın" kuralını eslint-plugin-protractor yardımı ile bile uyguladık. Senin durumunda

, textToBePresentInElement mükemmel bir uyum:

var EC = protractor.ExpectedConditions; 
browser.wait(EC.textToBePresentInElement(popover, "text to expect"), 5000); 

Açıölçer metin öğesi varsa 5 saniye sürekli kontrol sona beklerdi. 5 saniye sonra metin orada olmazsa - bir hata alırsınız ve test başarısız olur.

Gerekirse, "popover görünene kadar bekleyin" bölümü için visibilityOf expected condition'u da kullanabilirsiniz.


Belirli bir düzenli ifade deseni ile eşleşen bir test için beklemek gerekiyorsa, bir özel Beklenen Durum yapabilirsiniz:

var EC = protractor.ExpectedConditions; 

var patternToBePresentInElement = function(elementFinder, pattern) { 
    var matchesPattern = function() { 
    return elementFinder.getText().then(function(actualText) { 
     return actualText.search(pattern) !== -1; 
    }); 
    }; 
    return EC.and(EC.presenceOf(elementFinder), matchesPattern); 
}; 

Kullanımı:

browser.wait(patternToBePresentInElement(popover, /\w+/), 5000); 
+0

o Olabilir 'textToBePresentInElement' bir normal ifadeyi kabul etmiyor mu? 'Browser.wait (EC.textToBePresentInElement (popover, browser.params.regexNotEmpty), 5000); 'çalışmaz. 'Browser.wait (EC.textToBePresentInElement (popover, 5000,) 've havaalanından tüm sürmek için 4,90 €');' çalışır. – mles

+0

@mles ayy bu regex değil düzenli bir dize oldu fark etmedi. Evet, beklenen koşul normal ifadeleri kabul etmiyor. Bu durumda özel bir tane yapabilir miyiz? Teşekkürler – alecxe

+0

Kesinlikle! “TextToBePresentInElement()” ifadesini regex'i nasıl kabul edeceğimi düşündüm. – mles

İlgili konular