我一直在尝试通过使用一堆console.logs来解决这个问题,但仍然不知道为什么这些加载时间这么长。
因此,我在Mocha单元测试文件的beforeEach
中包含以下代码。
browser.fill('email', '[email protected]');
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秒的延迟?
编辑我现在也遇到同样的问题,但是有一个50000ms。在我所有的测试中,这真的 super 快。我仍然不知道为什么会这样。
编辑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
中的每一个之后的b
和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文档:
关于javascript - Zombie.js pressButton长时间回调延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38884329/