量角器从dom中移除元素

时间:2015-05-15 10:11:27

标签: angularjs dom testing protractor e2e-testing

我因为我们正在使用的模板的一种奇怪(而不是那么酷)的行为而陷入了与量角器的测试中。

在页面加载时,模板在叠加层上以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中的元素,以完全删除叠加层,因为我不想测试它而我不是担心它是否破裂。

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

您可以使用browser.executeScript在浏览器的上下文中执行某些代码:

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

答案 1 :(得分:1)

我不认为在测试期间删除部分DOM结构是个好主意。而不是使用超时,显式等待元素可点击:

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

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