Class: Selenium::WebDriver::Wait

Inherits:
Object
  • Object
show all
Defined in:
lib/selenium/webdriver/common/wait.rb

Constant Summary collapse

DEFAULT_TIMEOUT =
5
DEFAULT_INTERVAL =
0.2

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Wait

Create a new Wait 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)

Parameters:

  • (defaults to: {})

    Options for this instance



37
38
39
40
41
42
# File 'lib/selenium/webdriver/common/wait.rb', line 37

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

#until(&blk) ⇒ Object

Wait until the given block returns a true value.

Raises:

Returns:

  • the result of the block



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/selenium/webdriver/common/wait.rb', line 52

def until(&blk)
  end_time = Time.now + @timeout
  last_error = nil

  until Time.now > end_time
    begin
      result = yield
      return result if result
    rescue *@ignored => last_error
      # swallowed
    end

    sleep @interval
  end


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

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

  raise Error::TimeOutError, msg
end