Zombie.js pressButton Long Callback Delay

Cha*_*ish 8 javascript performance mocha.js node.js zombie.js

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

所以我beforeEach在我的Mocha单元测试文件中有以下代码.

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

在这种情况下按下按钮将有一些重定向,然后最终显示仪表板页面.在该html文件的底部,我有以下代码.

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

因此,在运行测试之后,如果我在#100 减去该值之后取值,#200则总是大约5000-6000.因为#200总是在#1005-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
Run Code Online (Sandbox Code Playgroud)

是什么导致了所有这些zombie Fired setInterval every 5000ms以及如何修复它使其不需要55000ms +?

编辑3

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

browser.addListener("setInterval",function (a,b) {
    console.log("a: "+a);
    console.log("b: "+b);
});
Run Code Online (Sandbox Code Playgroud)

在打印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
Run Code Online (Sandbox Code Playgroud)

ab那些11中的每一个之后的相同zombie Fired setInterval every 5000ms.在这11次之间它完全没有变化.

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

mr.*_*eze 2

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

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

来自 API 文档:

浏览器.等待(回调)

browser.wait(终止符,回调)

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

您可以使用第二种形式在处理所有事件之前传递控制权。终止符可以是数字,在这种情况下会处理许多事件。它可以是一个函数,在每个事件之后调用;当函数返回值 false 时,处理停止。