Skip to content

Instantly share code, notes, and snippets.

@joselo
Forked from metaskills/wait_until.rb
Created August 26, 2011 02:46
Show Gist options
  • Save joselo/1172570 to your computer and use it in GitHub Desktop.
Save joselo/1172570 to your computer and use it in GitHub Desktop.
Never sleep() using Capybara!
# Have you ever had to sleep() in Capybara-WebKit to wait for AJAX and/or CSS animations?
describe 'Modal' do
should 'display login errors' do
visit root_path
click_link 'My HomeMarks'
within '#login_area' do
fill_in 'email', with: 'will@not.work'
fill_in 'password', with: 'test'
click_button 'Login'
end
# DO NOT sleep(1) HERE!
assert_modal_visible
page.find(modal_wrapper_id).text.must_match %r{login failed.*use the forgot password}i
end
end
# Avoid it by using Capybara's #wait_until method. My modal visible/hidden helpers
# do just that. The #wait_until uses the default timeout value.
def modal_wrapper_id
'#hmarks_modal_sheet_wrap'
end
def assert_modal_visible
wait_until { page.find(modal_wrapper_id).visible? }
assert page.find(modal_wrapper_id).visible?, 'Expected modal to be visible.'
end
def assert_modal_hidden
wait_until { !page.find(modal_wrapper_id).visible? }
refute page.find(modal_wrapper_id).visible?, 'Expected modal to be hidden.'
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment