Zombie.js按键长回调延迟

8

我一直在尝试通过使用大量的console.logs来弄清楚这个问题,但仍然无法弄清为什么加载时间如此之长。

因此,在我的Mocha单元测试文件的beforeEach中,我有以下代码。

browser.fill('email', 'test1@test.com');
browser.fill('password', 'testtest');
browser.pressButton('Login').then(function () {
    console.log("#100 - "+ new Date().getTime());
    done();
});

在这种情况下按下按钮将会有几次重定向,最终显示仪表板页面。在该HTML文件的底部我有以下代码。

<script>
    $(document).ready(function () {
        console.log("#200 - "+ new Date().getTime());
    });
</script>

在运行测试后,如果我将#100之后的值减去#200之后的值,它总是大约5000-6000。因为#200总是比#100早打印出来,大约提前了5-6秒。

我不明白为什么在加载页面后,Zombie.js需要额外的5-6秒才能调用回调函数。

Zombie.js是否有一些等待或延迟,我可能忽略了在加载页面后?还有什么可能导致页面加载和Zombie.js调用回调函数之间的这5-6秒延迟?

编辑 我现在遇到了同样的问题,但是延迟时间长达50000毫秒。在所有测试中,这真的非常快地累加。我仍然无法弄清楚为什么会发生这种情况。

编辑2

如果我将browser.debug()添加到我的测试中,它会在最后打印以下内容。它还会打印很多其他东西,但总体上发生得非常快。我认为以下可能是问题所在。只是不确定为什么会这样做或如何修复它。

zombie Fired setInterval every 5000ms +11ms
zombie Fired setInterval every 5000ms +5s
zombie Fired setInterval every 5000ms +5s
zombie Fired setInterval every 5000ms +5s
zombie Fired setInterval every 5000ms +5s
zombie Fired setInterval every 5000ms +5s
zombie Fired setInterval every 5000ms +5s
zombie Fired setInterval every 5000ms +5s
zombie Fired setInterval every 5000ms +5s
zombie Fired setInterval every 5000ms +5s
zombie Fired setInterval every 5000ms +5s

什么导致了所有的“zombie Fired setInterval every 5000ms”,我该如何修复以使其不需要花费55000ms以上?
编辑3
我还在单元测试开始时添加了以下代码。
browser.addListener("setInterval",function (a,b) {
    console.log("a: "+a);
    console.log("b: "+b);
});

在每次打印“僵尸Fired setInterval every 5000ms +5s”时,由于该监听器,还会打印以下内容。
a: function (){var b,c,d;if(b=window.location.href,b!==h){try{d=JSON.stringify({action:"ping",sid:a.utils.getSessionID(),muid:a.utils.getMerchantID(),referrer:h,url:b,title:document.title}),e.contentWindow.postMessage(d,"*")}catch(f){c=f}return h=b}}
b: 5000

ab 在这 11 次 每 5000ms 执行一次的僵尸 Fired setInterval 后依然相同。在这 11 次之间,它们都没有发生任何改变。

我本以为这个函数会有所帮助,但是我仍然不理解为什么会出现这种情况,也不知道如何修复。

1个回答

2

Zombie会在触发回调之前加载所有资源并处理所有事件。不要使用pressButton,而是直接提交表单,并使用带有终止回调的wait,该回调将在每个事件后被调用。这应该可以显示导致延迟的原因:

browser.document.forms[0].submit();
browser.wait(function(){
   //called after each event
}, function() {
   //all events processed
});

从API文档中得知:

browser.wait(callback)

browser.wait(terminator, callback)

处理队列中的所有事件并在完成后调用回调函数。

你可以使用第二个形式在处理所有事件之前传递控制。终止符可以是一个数字,此时处理这么多个事件。它也可以是一个函数,在每个事件后被调用;当函数返回false时,处理停止。


抱歉回复晚了,直到现在我才看到。我应该如何在每个事件后检测更改?如果每个事件之间的差异大于某个量,则运行console.log(browser.html()); 。但是我找不到任何更改。那么我该如何找出事件之间为什么需要这么长的时间呢?我目前有一个单元测试需要超过一分钟,但我无法弄清楚原因。过去只需要大约7秒钟左右。现在需要8倍以上的时间。但我找不到任何导致这种情况的代码更改。 - Charlie Fish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接