Ruby selenium / capybara等待元素消失

时间:2018-02-20 23:21:35

标签: ruby selenium rspec kendo-ui capybara

我知道这不是一个独特的问题,但我还没有找到一个实际的解决方案......我有一个页面在加载时有一个微调器。我希望我的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

3 个答案:

答案 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