javascript - Zombie.js pressButton 长回调延迟

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

我一直试图通过使用一堆 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);
});

在每 5000 毫秒 +5 秒打印每个 zombie Fired setInterval 之后,由于该监听器,它还会打印以下内容。

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 个 zombie Fired setInterval every 5000ms 之后是相同的。在这 11 次之间它根本没有改变。

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

最佳答案

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)

Process all events in the queue and calls the callback when done.

You can use the second form to pass control before processing all events. The terminator can be a number, in which case that many events are processed. It can be a function, which is called after each event; processing stops when the function returns the value false.

关于javascript - Zombie.js pressButton 长回调延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38884329/

相关文章:

node.js - 类型错误 : Cannot read property 'define' of undefined

linux - Linux 中的时间命令显示的用户和系统时间过高

c++ - 为什么 std::vector 的分配和释放比我机器上的动态数组慢

python - 如何配置 Django 以及如何以 cpu 性能运行 Gunicorn worker?

javascript - 排序并返回数组任务中的差异,返回未定义

javascript - 单击后退按钮时重定向到不同页面 "not working"

javascript - 在 HTML5 中将两个图像组合在一个 Canvas 上

javascript - Nodejs udemy类(class)代码错误

javascript - 循环遍历数组,每次都进行ajax调用,不起作用

node.js - 错误: Not Found in firebase file storage