Module: ToleranceForSeleniumSyncIssues
- Defined in:
- lib/spreewald_support/tolerance_for_selenium_sync_issues.rb
Constant Summary collapse
- RETRY_ERRORS =
%w[ Capybara::ElementNotFound Spec::Expectations::ExpectationNotMetError RSpec::Expectations::ExpectationNotMetError Minitest::Assertion Capybara::Poltergeist::ClickFailed Capybara::ExpectationNotMet Selenium::WebDriver::Error::StaleElementReferenceError Selenium::WebDriver::Error::NoAlertPresentError Selenium::WebDriver::Error::ElementNotVisibleError Selenium::WebDriver::Error::NoSuchFrameError Selenium::WebDriver::Error::NoAlertPresentError Selenium::WebDriver::Error::JavascriptError ]
Instance Method Summary collapse
-
#patiently(seconds = Capybara.default_wait_time, &block) ⇒ Object
This is similiar but not entirely the same as Capybara::Node::Base#wait_until or Capybara::Session#wait_until.
Instance Method Details
#patiently(seconds = Capybara.default_wait_time, &block) ⇒ Object
This is similiar but not entirely the same as Capybara::Node::Base#wait_until or Capybara::Session#wait_until
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/spreewald_support/tolerance_for_selenium_sync_issues.rb', line 20 def patiently(seconds=Capybara.default_wait_time, &block) old_wait_time = Capybara.default_wait_time # dont make nested wait_untils use up all the alloted time Capybara.default_wait_time = 0 # for we are a jealous gem if page.driver.wait? start_time = Time.now begin block.call rescue Exception => e raise e unless RETRY_ERRORS.include?(e.class.name) raise e if (Time.now - start_time) >= seconds sleep(0.05) raise Capybara::FrozenInTime, "time appears to be frozen, Capybara does not work with libraries which freeze time, consider using time travelling instead" if Time.now == start_time retry end else block.call end ensure Capybara.default_wait_time = old_wait_time end |