2015-03-02 19 views

cevap

62

basit cevap bu iletki size $http veya $timeout (örneğin bir "yükleme sırasında davranışını test ediyorsanız yapmak isteyebilirsiniz gidermek için böyle $http veya $timeout gelenler gibi Açısal sözlerin, beklemez sağlamasıdır "mesaj) veya ayrı bir giriş sayfası gibi Açısal olmayan siteleri veya sayfaları test etme.

Örneğin, içeriği

element(by.css('button[type="submit"]')).click(); 
browser.ignoreSynchronization = true; 
expect(element(by.css('.message')).getText().toBe('Loading...');  
browser.ignoreSynchronization = false; 
expect(element(by.css('.message')).getText().toBe('Loaded'); 

bundan daha kapsamlı bir cevap kontrol unsurunu + getirilirken zaman true olarak ayarlayabilirsiniz bir istek sırasında bir yükleme mesajı ayarlayan bir düğme yani test etmek ayarlayarak olmasıdır true kontrol akış sonraki eklemeler/enjeksiyonları da browser.waitForAngular katmayan anlamına gelir. Kontrol akışının anlaşılması ve olaylara ne zaman/nasıl eklendiğinin/enjekte edilmesinin önemli olduğu durumlar vardır. bir çok-aşamalı süreç test browser.wait kullanırken Örneğin, wait geçirilen fonksiyon testinde fonksiyonlarının çoğu kontrol akışına ekledikten sonra kontrol akış içine enjekte edilir.

element(by.css('button[type="submit"]')).click(); 
browser.ignoreSynchronization = true; 
expect(element(by.css('.message')).getText().toBe('Stage 1'); 
browser.wait(function() { 
    // This function is added to the control flow after the final 
    // browser.ignoreSynchronization = false in the test 
    // so we need to set it again here 
    browser.ignoreSynchronization = true; 
    return element(by.cssContainingText('.message', 'Stage 2')).isPresent().then(function(isPresent) { 
    // Cleanup so later tests have the default value of false 
    browser.ignoreSynchronization = false; 
    return !isPresent; 
    }); 
}); 
expect(element(by.css('.message')).getText().toBe('Stage 2'); 
browser.ignoreSynchronization = false; 
expect(element(by.css('.message')).getText().toBe('Stage 3'); 

browser.ignoreSynchronization kullanarak alternatif doğrudan

element(by.css('button[type="submit"]')).click(); 
expect(browser.driver.findElement(by.css('.message')).getText().toBe('Loading...');  
expect(element(by.css('.message')).getText().toBe('Loaded'); 

unsurları bulmak için doğrudan sürücü yöntemlerini kullanma sistemi, herhangi devam eden beklemeden onları bulmak için çalışacağı anlamına gelir standart webdriver API erişmektir $http istekleri çok browser.ignoreSynchronization = true belirleme gibi bitirmek için.

15

Bu ayar iletki bir sayfada ya da olmasın açısal beklemek gerekmediğini kontrol eder. Düzgün belgelenmiş, ama burada documentation string from the code olduğu değildir:

/** 
    * If true, Protractor will not attempt to synchronize with the page before 
    * performing actions. This can be harmful because Protractor will not wait 
    * until $timeouts and $http calls have been processed, which can cause 
    * tests to become flaky. This should be used only when necessary, such as 
    * when a page continuously polls an API using $timeout. 
    * 
    * @type {boolean} 
    */ 

Başka bir deyişle, olmayan bir açısal sitesine karşı test ediyorsanız - true için ignoreSynchronization ayarını. Non-angular page opened after a click: gerçek bir dünya örnek olarak, bir açısal sayfadan olmayan bir açısal sayfasını açarken vardı zorluklardan biri görüyoruz.