Class: Sauce::Capybara::Driver
- Inherits:
-
Capybara::Selenium::Driver
- Object
- Capybara::Selenium::Driver
- Sauce::Capybara::Driver
- Defined in:
- lib/sauce/capybara.rb
Constant Summary collapse
- RETRY_ON =
[::Selenium::WebDriver::Error::UnhandledError, ::Selenium::WebDriver::Error::UnknownError]
- MAX_RETRIES =
3
Instance Method Summary collapse
- #base_reset! ⇒ Object
-
#browser ⇒ Object
Oh gods why didn’t I comment these when I wrote them? These are what I think I’m doing.
-
#existing_browser? ⇒ Boolean
If a browser has been created OR RSpec has put one in the diriver pool and we’re using that browser, returns true.
- #finish! ⇒ Object
- #handle_retry(method, *args, &block) ⇒ Object
- #render(path) ⇒ Object
- #reset! ⇒ Object
-
#rspec_browser ⇒ Object
Returns the rspec created browser if it exists.
Instance Method Details
#base_reset! ⇒ Object
46 |
# File 'lib/sauce/capybara.rb', line 46 alias :base_reset! :reset! |
#browser ⇒ Object
Oh gods why didn’t I comment these when I wrote them? These are what I think I’m doing.
Returns the browser currently being used or fetches a new browser, either from the RSpec integration or by creating one.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/sauce/capybara.rb', line 84 def browser # Return the existing browser if we have it unless existing_browser? # Try to get a driver from the driver pool @browser = rspec_browser unless @browser Sauce.logger.debug "Capybara creating new Selenium driver." @browser = Sauce::Selenium2.new at_exit do finish! end end end @browser end |
#existing_browser? ⇒ Boolean
If a browser has been created OR RSpec has put one in the diriver pool and we’re using that browser, returns true.
113 114 115 116 117 118 119 |
# File 'lib/sauce/capybara.rb', line 113 def existing_browser? if @using_rspec_browser @browser == Sauce.driver_pool[Thread.current.object_id] else @browser end end |
#finish! ⇒ Object
121 122 123 124 125 126 127 128 129 130 |
# File 'lib/sauce/capybara.rb', line 121 def finish! Sauce.logger.debug "Capybara integration called #finish!" @browser.quit if existing_browser? @browser = nil # Rethink how to do this. RSpec still references the driver pool. Sauce.logger.debug "Capybara - Removing driver for #{Thread.current.object_id} from driver pool." Sauce.driver_pool[Thread.current.object_id] = nil @using_rspec_browser = nil end |
#handle_retry(method, *args, &block) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/sauce/capybara.rb', line 17 def handle_retry(method, *args, &block) retries = 0 # Disable retries only when we really really want to, this will remain # an undocomented hack for the time being if ENV['SAUCE_DISABLE_RETRY'] retries = MAX_RETRIES end begin send("base_#{method}".to_sym, *args, &block) rescue *RETRY_ON => e if retries < MAX_RETRIES puts "Received an exception (#{e}), retrying" retries = retries + 1 retry else raise end end end |
#render(path) ⇒ Object
147 148 149 |
# File 'lib/sauce/capybara.rb', line 147 def render(path) browser.save_screenshot path end |
#reset! ⇒ Object
132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/sauce/capybara.rb', line 132 def reset! begin base_reset! rescue Selenium::WebDriver::Error::WebDriverError => e session_finished = e..match "ERROR Job is not in progress" if @browser.config[:suppress_session_quit_failures] && session_finished @browser=nil else raise e end end end |
#rspec_browser ⇒ Object
Returns the rspec created browser if it exists
101 102 103 104 105 106 107 108 109 |
# File 'lib/sauce/capybara.rb', line 101 def rspec_browser if browser = Sauce.driver_pool[Thread.current.object_id] Sauce.logger.debug "Capybara using browser from driver_pool (browser.session_id)." @using_rspec_browser = true else @using_rspec_browser = false end browser end |