diff --git a/lib/capybara.rb b/lib/capybara.rb index c9efa2b0..64631c3f 100644 --- a/lib/capybara.rb +++ b/lib/capybara.rb @@ -11,15 +11,11 @@ module Capybara class << self attr_accessor :debug, :asset_root, :app_host - attr_writer :default_selector, :default_wait_timeout + attr_writer :default_selector def default_selector @default_selector ||= :xpath end - - def default_wait_timeout - @default_wait_timeout ||= 1 - end def log(message) puts "[capybara] #{message}" if debug diff --git a/lib/capybara/session.rb b/lib/capybara/session.rb index f0b0cb63..d79e5741 100644 --- a/lib/capybara/session.rb +++ b/lib/capybara/session.rb @@ -130,40 +130,22 @@ module Capybara end def wait_for(locator) - return find(locator) unless driver.wait? - 8.times do - result = find(locator) - return result if result - sleep(0.1) - end - nil + wait_until { find(locator) } end def wait_for_condition(script) - begin - Timeout.timeout(Capybara.default_wait_timeout) do - result = false - until result - result = evaluate_script(script) - end - return result - end - rescue Timeout::Error - return false - end + wait_until { evaluate_script(script) } end - def wait_until(timeout = Capybara.default_wait_timeout, &block) + def wait_until return yield unless driver.wait? - - returned = nil - Timeout.timeout(timeout) do - sleep(0.1) until returned = yield + 10.times do + if result = yield + return result + end + sleep(0.1) end - rescue Timeout::Error - return false - else - return returned + nil end def evaluate_script(script) diff --git a/spec/session_with_javascript_support_spec.rb b/spec/session_with_javascript_support_spec.rb index 563a4c61..8e034fae 100644 --- a/spec/session_with_javascript_support_spec.rb +++ b/spec/session_with_javascript_support_spec.rb @@ -33,7 +33,7 @@ shared_examples_for "session with javascript support" do it "should return false if block doesn't return true within timeout" do @session.visit('/with_html') - @session.wait_until { false }.should be_false + @session.wait_until { false }.should be_nil end end