Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何让水豚找到快速出现和消失的元素(加载微调器)_Ruby On Rails_Ruby_Rspec_Capybara - Fatal编程技术网

Ruby on rails 如何让水豚找到快速出现和消失的元素(加载微调器)

Ruby on rails 如何让水豚找到快速出现和消失的元素(加载微调器),ruby-on-rails,ruby,rspec,capybara,Ruby On Rails,Ruby,Rspec,Capybara,我有一个应用程序,您可以选择一个复选框,单击提交按钮,然后进行值更新。在现实世界中,单击会触发API调用,并且值会随着响应而更新。在调用API和返回值之间,我还将要更新的值区域设置为使用微调器填充一个加载微调器。这在现实生活中非常有效。但是,在测试中,我希望确保微调器出现、消失,然后新值就位。在使用rspec的测试环境中,我设置了一个sinatra假服务,通过webmock的stub_请求响应所有API调用 所以问题是sinatra真的很快给出了值,如此之快以至于水豚从来没有看到旋转器。我想这就

我有一个应用程序,您可以选择一个复选框,单击提交按钮,然后进行值更新。在现实世界中,单击会触发API调用,并且值会随着响应而更新。在调用API和返回值之间,我还将要更新的值区域设置为使用微调器填充一个加载微调器。这在现实生活中非常有效。但是,在测试中,我希望确保微调器出现、消失,然后新值就位。在使用rspec的测试环境中,我设置了一个sinatra假服务,通过webmock的stub_请求响应所有API调用

所以问题是sinatra真的很快给出了值,如此之快以至于水豚从来没有看到旋转器。我想这就是问题所在

我试图人为地减缓sinatra对这些特性规格的响应,但没有成功。此外,我不想这样,因为我想让套房快一点。以下是一个示例规范:

它“允许用户更改等待的拾取库”,js:true-do 参观大埔道 第页。勾选“等待列表\uuuuuu3911148” 第页。从“一些”下拉列表中选择“一个很棒的值” 第页。单击按钮“更新所选内容” expectpage.to拥有css“微调器边框”,这将始终无法检测到 expectpage.to有css“hold3911148.Picking”在,文本:“York” 终止
测试和应用程序异步运行,因此如果您确实需要验证微调器的显示,那么您唯一的选择就是将该测试的响应速度减慢到足以让微调器实际显示和被看到的程度。根据您使用的驱动程序以及浏览器驱动程序chromedriver、geckodriver等作者选择实现按钮单击的方式,您需要等待的时间可能比您预期的要长。这是因为驱动程序作者可能会选择让按钮点击等待一段时间,看看它们是否触发页面加载,而水豚在点击按钮返回之前无法开始寻找微调器


我知道你说过放慢反应速度是行不通的,但是如果没有任何关于你到底做了什么的细节,很难做出诊断。这还假设所有浏览器调用都将转到您的应用程序,然后您的应用程序将调用外部服务,而您在返回之前通过sinatra应用程序伪造的外部服务webmock不能用于伪造直接从浏览器发出的外部API调用

您使用的驱动程序是什么?我尝试过:selenium,:Seleniu headless,:硒铬和:硒铬无头。我选择:selenium\u chrome\u headless作为js功能规格的默认值。你确定元素确实出现了吗?在减缓Sinatra反应的情况下,它不起作用意味着什么?如果西纳特拉从未回应,那么旋转器应该无限期地存在并可见,那么会发生什么?我希望套件的速度很快,这很好,但如果它不能代表你在现实世界中的应用,那么它就不是一个有用的约束。是的,元素出现了,这就是我所说的在现实生活中工作得很好的意思-如果我在sinatra使用头部浏览器时将睡眠添加到伪造的web服务中,它还显示了测试中的微调。它不工作意味着它没有找到微调器,规格失败。如果我试图延长睡眠时间,使其不会响应,即使我可以看到浏览器执行该操作并看到微调器出现,规范也会失败,说它找不到该微调器。我愿意牺牲套件的速度来换取测试的准确性,我很好奇我是否遗漏了什么。是的,是应用程序在调用API,而不是浏览器。基本上,我只是在API调用被伪造时添加了5个睡眠。我意识到这里有很多上下文,但如果这有帮助的话,我在第31行添加了睡眠。感谢您编写/维护水豚。@cdmo假设水豚真的被击中了,我希望它能够显示旋转器。要测试它,请执行一些极端的操作,如sleep 30,并查看在测试运行时是否可以在浏览器中看到微调器。因此,我尝试了30,并尝试了各种驱动程序。每次运行时,我都得到了相同的响应,希望找到css微调器边框,但没有匹配项。当我在有标题的浏览器上观看测试运行时,我观察到的是单击操作发生,微调器出现,几秒钟后整个浏览器屏幕变为白色,几秒钟后浏览器窗口关闭。再次感谢您的帮助/建议。也许我错了?@cdmo你确定你的css是对的吗?如果微调器的id为“spinner border”,那么您需要使用“\u css”“spinner-border”“@cdmo”查看您的代码,您可能需要使用“\u css”“.spinner-border”“,因为“spinner-border”是一个在span上使用的类,或者如果您需要,可以使用div元素do div.spinner-border更快/更高效,等等