2015-05-15 89 views
1

由於我們正在使用的模板存在奇怪(並且不那麼酷)的行爲,因此我在量角器的測試中被卡住了。量角器從dom中移除元素

在頁面加載,模板具有上會後這樣1秒鐘被隱藏疊加:

$(document).ready(function(config){ 
    setTimeout(function(){ 
     $('.page-loading-overlay').addClass('loaded'); 
     $('.load_circle_wrapper').addClass('loaded'); 
    },1000); 
}); 

*這感覺很糟糕,我(不想這個評論)

反正我的測試會出現問題,因爲他們跑得比較快的第二和他們拋出這個錯誤:

UnknownError: unknown error: Element is not clickable at point (463, 625). Other element would receive the click: <div class="page-loading-overlay loaded">...</div> 

因爲,很顯然是收到點擊覆蓋。

我在測試中發現了一個設置超時的解決方法,但這會真的減慢我的套件和CI/CD進程。並使測試代碼混亂。

下面是代碼:

it('should test something', function(){ 
    setTimeout(function(){ 
     // test code 
    }, 1000); 
}); 

我想知道是否有任何方式從beforeEach語句中的DOM刪除元素,徹底清除覆蓋,因爲我不希望測試如果它壞了,我並不擔心。

有什麼建議嗎?

+0

如果你關閉/刪除在繼續之前先在測試中重疊? – dcodesmith

回答

3

您可以使用browser.executeScript在他的瀏覽器的上下文中執行一些代碼:

beforeEach(function() { 
    browser.executeScript("$('.page-loading-overlay').remove();"); 
}); 
+0

感謝您的建議,遵循@alecxe建議,我避免刪除該元素,並簡單地添加beforeEach中的類。我更喜歡遵循這種方法,因爲我想盡可能保持測試的速度。 – teone

1

我不認爲在測試過程中移除DOM結構的一部分是個好主意。而不是使用超時,明確等待的元素可點擊:

var elm = element(by.id("myid")); 
var EC = protractor.ExpectedConditions; 

browser.wait(EC.elementToBeClickable(elm), 5000);