123456789_123456789_123456789_123456789_123456789_

Class: Selenium::WebDriver::Wait

Relationships & Source Files
Inherits: Object
Defined in: rb/lib/selenium/webdriver/common/wait.rb

Constant Summary

Class Method Summary

Instance Method Summary

Constructor Details

.new(opts = {}) ⇒ Wait

Create a new Wait instance

Parameters:

  • opts (Hash) (defaults to: {})

    Options for this instance

Options Hash (opts):

  • :timeout (Numeric) — default: 5

    Seconds to wait before timing out.

  • :interval (Numeric) — default: 0.2

    Seconds to sleep between polls.

  • :message (String)

    Exception mesage if timed out.

  • :ignore (Array, Exception)

    Exceptions to ignore while polling (default: Error::NoSuchElementError)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/wait.rb', line 36

def initialize(opts = {})
  @timeout  = opts.fetch(:timeout, DEFAULT_TIMEOUT)
  @interval = opts.fetch(:interval, DEFAULT_INTERVAL)
  @message  = opts[:message]
  @ignored  = Array(opts[:ignore] || Error::NoSuchElementError)
end

Instance Method Details

#current_time (private)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/wait.rb', line 78

def current_time
  Process.clock_gettime(Process::CLOCK_MONOTONIC)
end

#untilObject

Wait until the given block returns a true value.

Returns:

  • (Object)

    the result of the block

Raises:

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/wait.rb', line 50

def until
  end_time = current_time + @timeout
  last_error = nil

  until current_time > end_time
    begin
      result = yield
      return result if result
    rescue *@ignored => last_error # rubocop:disable Naming/RescuedExceptionsVariableName
      # swallowed
    end

    sleep @interval
  end

  msg = if @message
          @message.dup
        else
          "timed out after #{@timeout} seconds"
        end

  msg << " (#{last_error.message})" if last_error

  raise Error::TimeoutError, msg
end