我知道这不是一个独特的问题,但我还没有找到一个实际的解决方案......我有一个页面在加载时有一个微调器。我希望我的ruby rspec要做的是等待微调器在移动之前消失......
我已经实施了wait_for_ajax
,这有助于但不能完全解决问题:
def wait_for_ajax
Timeout.timeout(Capybara.default_max_wait_time) do
loop until page.evaluate_script('jQuery.active').zero?
end
end
鉴于微调器有某个类(由Kendo生成),我该如何等待该元素消失?这就是我目前正在尝试的......
def wait_until_load
Timeout.timeout(Capybara.default_max_wait_time) do
loop until !find(".k-loading-color")
end
end
答案 0 :(得分:1)
99%的时间如果您需要wait_for_ajax
您做错了什么。在你目前的情况下,你应该只是做
expect(page).to have_no_css('.k-loading-color')
将等待Capybara.default_max_wait_time
秒,以便匹配元素消失。如果您需要允许的时间超过设置为Capybara.default_max_wait_time
的时间,则可以覆盖最长等待时间,如
expect(page).to have_no_css('.k-loading-color', wait: 10)
将等待最多10秒钟以使任何匹配的项目消失
答案 1 :(得分:0)
如果您当前的循环不起作用,我希望带有类k-loading-color的微调器保留在DOM中但具有隐藏属性。
我尝试使用可见的?方法
def wait_until_load
Timeout.timeout(Capybara.default_max_wait_time) do
loop until !find(".k-loading-color").visible?
end
end
当然,这只有在
时才有效find(".k-loading-color").visible? == true
页面首次加载时
答案 2 :(得分:0)
我最终使用了:
def wait_until_load
Timeout.timeout(Capybara.default_max_wait_time) do
loop until page.has_no_css?(".k-loading-color")
end
end