Zombie.js pressButton Long Callback Delay

时间:2016-08-10 22:05:07

标签: javascript node.js performance mocha zombie.js

我一直试图通过使用一堆console.log来解决这个问题,但仍然无法弄清楚为什么这些加载时间太长。

所以我在我的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的原因是什么?如何修复它以使其不需要55000毫秒+?

编辑3

我还在单元测试开始时添加了以下代码。

browser.addListener("setInterval",function (a,b) {
    console.log("a: "+a);
    console.log("b: "+b);
});

打印每个zombie 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
在{11} a中的每一个之后,{p> bzombie Fired setInterval every 5000ms都是相同的。它在这11次之间根本没有变化。

我认为这个功能在某种程度上会有所帮助,但我仍然不明白为什么会发生这种情况或如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

Zombie在触发回调之前加载所有资源并处理所有事件。不要使用 pressButton ,请尝试直接提交表单并使用等待并使用终结器回调,该回调将在每个事件后调用。这应该会告诉你导致延迟的原因:

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

来自API文档:

  

<强> browser.wait(回调)

     

browser.wait(终结者,回调)

     

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

     

在处理所有内容之前,您可以使用第二个表单来传递控件   事件。终结符可以是数字,在这种情况下可以是许多事件   正在处理中。它可以是函数,在每个事件之后调用;   当函数返回值false时,处理停止。