如何使用Ruby / Capybara重新加载页面直到元素可用?

时间:2016-01-07 09:29:39

标签: ruby selenium capybara

任务:我正在使用Ruby和Capybara编写一个脚本,用于检查日历中的某一天是否可用于预订。

问题:每当Capybara无法找到这个元素时,它会通过一个错误,一切都会停止。下面是我用来检查元素是否可用的代码行。如果找到则返回true,但如果找不到则返回错误。

page.should have_selector("input[type=submit][value='22']")

问题:在此元素可用之前,如何继续刷新页面?

Btw: I am using page.driver.browser.navigate.refresh to refresh the page

非常感谢

3 个答案:

答案 0 :(得分:1)

您可以使用

,而不是使用在失败时引发错误的have_selector
page.has_selector?("input...")

如果元素存在于Capybara.default_max_wait_time秒内的页面(pass:wait选项以更改该时间),则返回true,否则返回false。

答案 1 :(得分:0)

编写一个wait_until函数使用它来等待元素出现在页面上。见下文:

def wait_until
 require "timeout"
 Timeout.timeout(Capybara.default_max_wait_time) do
    sleep(0.1) until value = yield
    value
 end
end

称呼它:

wait_until { find(:css, "input[type=submit][value='22']").visible? }
# write your case 

答案 2 :(得分:0)

默认的Capybara行为是等待一段时间(可自定义),如果它找不到元素。

我建议您检查一下代码和选择器。

来自https://github.com/jnicklas/capybara

  

使用异步JavaScript时,您可能会遇到尝试与页面上尚不存在的元素进行交互的情况。 Capybara通过等待页面上显示的元素自动处理此事。