Ruby selenium/capybara 等待元素消失
Ruby selenium/capybara wait for element to go away
我知道这不是一个独特的问题,但我还没有找到实际的解决方案...我有一个页面在加载时上面有一个微调器。我希望我的 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
鉴于微调器具有某个 class(由 Kendo 生成),我如何才能等待该元素消失?这就是我目前正在尝试的...
def wait_until_load
Timeout.timeout(Capybara.default_max_wait_time) do
loop until !find(".k-loading-color")
end
end
如果您当前的循环不工作,我希望带有 class 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
首次加载页面时
我最终使用了:
def wait_until_load
Timeout.timeout(Capybara.default_max_wait_time) do
loop until page.has_no_css?(".k-loading-color")
end
end
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 秒让任何匹配项消失
我知道这不是一个独特的问题,但我还没有找到实际的解决方案...我有一个页面在加载时上面有一个微调器。我希望我的 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
鉴于微调器具有某个 class(由 Kendo 生成),我如何才能等待该元素消失?这就是我目前正在尝试的...
def wait_until_load
Timeout.timeout(Capybara.default_max_wait_time) do
loop until !find(".k-loading-color")
end
end
如果您当前的循环不工作,我希望带有 class 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
首次加载页面时
我最终使用了:
def wait_until_load
Timeout.timeout(Capybara.default_max_wait_time) do
loop until page.has_no_css?(".k-loading-color")
end
end
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 秒让任何匹配项消失