我一直试图通过使用一堆 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
a 和 b 在这 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/
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法
是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
是否可以为单个ActiveRecord实例添加回调?作为进一步的限制,这是继续使用库,所以我无法控制该类(除了对其进行猴子修补)。这或多或少是我想做的:defdo_something_creazymessage=Message.newmessage.on_save_call:do_even_more_crazy_stuffenddefdo_even_more_crazy_stuff(message)puts"Message#{message}hasbeensaved!Hallelujah!"end 最佳答案 你可以通过在创建对象后立
我想写一点“Deprecate-It”库并经常使用“method_added”回调。但是现在我注意到在包含模块时不会触发此回调。是否有任何回调或变通方法,以便在某些内容包含到自身时通知类“Foobar”?用于演示的小Demo:#IncludingModulswon'ttriggermethod_addedcallbackmoduleInvisibleMethoddefinvisible"Youwon'tgetacallbackfromme"endendclassFoobardefself.method_added(m)puts"InstanceMethod:'#{m}'addedto'
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
我有一个模型Listingbelongs_to:user。或者,Userhas_many:listings。每个列表都有一个对其进行分类的类别字段(狗、猫等)。User还有一个名为is_premium的bool字段。这是我验证类别的方式...validates_format_of:category,:with=>/(dogs|cats|birds|tigers|lions|rhinos)/,:message=>'isincorrect'假设我只想让高级用户能够添加老虎、狮子和犀牛。我该怎么做?最好在before_save方法中执行此操作吗?before_save:premium_che
我有一个应用程序专门使用Facebook作为身份验证提供程序,并正确设置了生产模式的回调。为了让它工作,您需要为您的Facebook应用程序提供一个站点URL和一个用于回调的站点域,在我的例子中是http://appname.heroku.com和appname。heroku.com分别。问题是我的Controller设置为只允许经过身份验证的session,所以我无法在开发模式下查看我的应用程序,因为Facebook应用程序的域显然没有设置为本地主机。如何在不更改Facebook设置的情况下解决这个问题? 最佳答案 创建另一个域l
我有一些使用delayed_job的小程序。在我的本地主机上一切正常,但是当我将我的应用程序部署到Heroku并单击应该由delayed_job执行的链接时,没有任何反应,“任务”只是保存到表delayed_job中。Inthisarticleonherokublog写入时,执行delayed_job表中的任务,当运行此命令时rakejobs:work。但是我怎样才能运行这个命令呢?命令应该放在哪里?在代码中,还是从终端控制台? 最佳答案 如果您正在运行Cedar堆栈,请从终端控制台运行以下命令:herokurunrakejobs: