Module: WebDriverUtils
- Defined in:
- lib/webdriver_utils/wait.rb,
lib/webdriver_utils/version.rb,
lib/webdriver_utils/silence_gem_warnings.rb
Overview
wait code from my appium ruby gem: github.com/appium/ruby_lib/blob/252e83806318df7df28e9060d3f8e1e56dc732ba/lib/appium_lib/common/wait.rb
Constant Summary collapse
- VERSION =
'1.0.1'- DATE =
'2015-06-20'
Class Method Summary collapse
-
._generic_wait(opts = {}, &block) ⇒ Object
bubble - if set, the last exception will be raised if it exists Wait code from the selenium Ruby gem github.com/SeleniumHQ/selenium/blob/cf501dda3f0ed12233de51ce8170c0e8090f0c20/rb/lib/selenium/webdriver/common/wait.rb.
-
._process_wait_opts(opts) ⇒ Object
process opts before calling _generic_wait.
- .silence_gem_warnings ⇒ Object
Class Method Details
._generic_wait(opts = {}, &block) ⇒ Object
bubble - if set, the last exception will be raised if it exists Wait code from the selenium Ruby gem github.com/SeleniumHQ/selenium/blob/cf501dda3f0ed12233de51ce8170c0e8090f0c20/rb/lib/selenium/webdriver/common/wait.rb
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/webdriver_utils/wait.rb', line 12 def _generic_wait(opts = {}, &block) valid_keys = [:timeout, :interval, :message, :ignore, :return_if_true, :bubble] invalid_keys = [] opts.keys.each { |key| invalid_keys << key unless valid_keys.include?(key) } # [:one, :two] => :one, :two fail "Invalid keys #{invalid_keys.to_s[1..-2]}. Valid keys are #{valid_keys.to_s[1..-2]}" unless invalid_keys.empty? # ensure negative timeout and interval are set to zero. timeout = opts.fetch(:timeout, 30) timeout = timeout < 0 ? 0 : timeout interval = opts.fetch(:interval, 0.2) interval = interval < 0 ? 0 : interval = opts[:message] ignored = Array(opts[:ignore] || ::Exception) return_if_true = opts[:return_if_true] bubble = !!opts.fetch(:bubble, false) start_time = Time.now end_time = start_time + timeout last_error = nil # design note, ::TypeError, ::NameError, ::NoMethodError are not # rescued then raised like ECONNREFUSED because they can legitimately # occur inside a block and self correct depending on the method return # value. This is unlike ECONNREFUSED which will always fail. # use do..while format to ensure the block always executes at least once # even if timeout is zero. begin begin if return_if_true result = block.call return result if result else return block.call end rescue ::Errno::ECONNREFUSED => e raise e rescue *ignored => last_error # rubocop:disable Lint/HandleExceptions # swallowed end sleep interval end until Time.now > end_time elapsed_time = (Time.now - start_time).round = "timed out after #{elapsed_time} seconds (timeout: #{timeout})" if msg = "#{.dup} [#{}]" else msg = end msg << " (#{last_error.})" if last_error fail_error = last_error if bubble fail_error ||= Selenium::WebDriver::Error::TimeOutError fail fail_error, msg end |
._process_wait_opts(opts) ⇒ Object
process opts before calling _generic_wait
75 76 77 78 79 |
# File 'lib/webdriver_utils/wait.rb', line 75 def _process_wait_opts(opts) opts = { timeout: opts } if opts.is_a?(Numeric) fail 'opts must be a hash' unless opts.is_a? Hash opts end |
.silence_gem_warnings ⇒ Object
3 4 5 6 7 8 9 |
# File 'lib/webdriver_utils/silence_gem_warnings.rb', line 3 def silence_gem_warnings # https://github.com/appium/ruby_console/blob/1049c515432212f164cfbabd413d6e3d82e4aada/lib/appium_console.rb#L5 Gem::Specification.class_eval do def self.warn args end end end |