2017-08-16 37 views
0

我在我的頁面上有一個滑動菜單,它通過動畫在一段時間之後出現。我想知道如何處理點擊操作,而不使用browser.wait(condition, timeout),因爲根據網絡流量來獲取遠程數據庫中的數據。量角器:等角度來完成動畫

頁面渲染可能需要很長時間,因此量角器觸發超時錯誤。我一直在試圖使用jQuery來等待所有轉換和動畫事件完成,但它仍然不起作用。

BasePage.prototype.clickMenuButton = function(menuName) { 

var link = element(by.linkText(menuName)); 

browser.ignoreSynchronization = true; 
browser.executeScript("jQuery('html > *').one('animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd', function(){})").then(
    function() { 
     link.click(); 
    }, 
    function (error) { console.log("Error : ", error); } 
); 
} 

有誰知道一種等待angularjs完成渲染和動畫,而無需使用browser.wait和超時?

+0

'browser.wait'是爲了等待,所以你爲什麼不想使用它? – Gunderson

回答

0

這是一個量角器與Angular JS「不兼容」。大多數人稱這是一個錯誤,但沒人確定。

但是,如果發生此問題,Angular和Protractor團隊建議您修復$ timeout等待,以$ interval函數替換$ timeout函數。他們幾乎是一樣的,他們都達到了同樣的目的。

$ interval函數修復量角器$超時問題。

Official documentation陳述對於任何連續輪詢的事情(在Angular 1.2rc3中引入),您應該使用$ interval。

在這種情況下,$ timeout對於JavaScript自動化開發人員(量角器開發人員)來說對於前端開發人員(AngularJS開發人員)來說都不是一個好的選擇。

另一種選擇是在測試應用程序中使用超時,或者關閉瀏覽器同步。 這是我的ignoreSynchronization函數的例子。

browser.ignoreSynchronization = true; 
       browser.wait(toast.isPresent(), 3000).then(
        function(arr) { 
         if (arr) { 
          toast.getText().then(function(txt) { 
           // console.log(txt); 
           expect(txt).toContain(caption); 
          }); 
         } else { 
          toast.getText().then(function(txt) { 
           console.log('current toast: ' + txt); 
           console.log('modal not catched. see bug with $timeout \n ' + 
            caption + " \n" + 
            "==> Error! NOT PRESENT"); 
          }); 

         } 

        } 
       ); 
       browser.ignoreSynchronization = false; 

你也可以看看their official github issue tracker。這個頁面指出,如果你有一個$ timeout函數,開發者不能改變這個(這看起來不太可能,並且看起來像一個糟糕的QA/dev關係),你應該使用ignoreSynchronization函數。

的主要結論是,爲固定量角器$超時等待的角前端開發人員應該很容易與$間隔替換$超時。

讓我知道它是否有幫助。