【问题标题】:Zombie.js pressButton Long Callback DelayZombie.js pressButton 长回调延迟
【发布时间】:2016-12-17 11:34:46
【问题描述】:

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

在打印每个 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

ab 在这 11 个 zombie Fired setInterval every 5000ms 中的每一个之后都是相同的。这 11 次之间根本没有变化。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    来自 API 文档:

    browser.wait(回调)

    browser.wait(终止符,回调)

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

    您可以使用 second 表单来传递控制权,然后再处理所有 事件。终止符可以是一个数字,在这种情况下,许多事件 被处理。可以是函数,每次事件后调用; 当函数返回值 false 时处理停止。

    【讨论】:

    • 抱歉回复延迟。直到现在才看到这个。在每个事件之后我将如何准确地检测到变化?如果每个事件之间的 MS 差异大于一定数量,我已经运行 console.log(browser.html());。但我找不到任何这些之间的任何变化。那么我如何弄清楚事件之间需要这么长时间呢?我目前有这个单元测试需要一分钟多的时间,我不知道为什么。过去大约需要 7 秒左右。现在它已经超过了 8 倍。而且我在我的代码中找不到任何会导致这种情况的更改。
    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多