Replace timeout with retries based approach
Somehow, using Timeout was causing the Broken Pipe errors in Culerity. Until someone can explain how and why, this approach seems to work without any significant drawbacks.
This commit is contained in:
parent
93a0ed55b9
commit
27d7057730
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue