任务:我正在使用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
非常感谢
答案 0 :(得分:1)
您可以使用
,而不是使用在失败时引发错误的have_selectorpage.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通过等待页面上显示的元素自动处理此事。