2015-05-15 91 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);