class Watir::AfterHooks

After hooks are blocks that run after certain browser events. They are generally used to ensure application under test does not encounter any error and are automatically executed after following events:

1. Open URL.
2. Refresh page.
3. Click, double-click or right-click on element.
4. Alert closing.

Public Class Methods

new(browser) click to toggle source
# File lib/watir/after_hooks.rb, line 15
def initialize(browser)
  @browser = browser
  @after_hooks = []
end

Public Instance Methods

<<(after_hook = nil, &block)
Alias for: add
[](index) click to toggle source

Gets the after hook at the given index.

@param [Integer] index @return [#call]

# File lib/watir/after_hooks.rb, line 129
def [](index)
  @after_hooks[index]
end
add(after_hook = nil, &block) click to toggle source

Adds new after hook.

@example

browser.after_hooks.add do |browser|
  browser.text.include?("Server Error") and puts "Application exception or 500 error!"
end
browser.goto "watir.com/404"
"Application exception or 500 error!"

@param [#call] after_hook Object responding to call @yield after_hook block @yieldparam [Watir::Browser]

# File lib/watir/after_hooks.rb, line 35
def add(after_hook = nil, &block)
  if block_given?
    @after_hooks << block
  elsif after_hook.respond_to? :call
    @after_hooks << after_hook
  else
    raise ArgumentError, 'expected block or object responding to #call'
  end
end
Also aliased as: <<
delete(after_hook) click to toggle source

Deletes after hook.

@example

browser.after_hooks.add do |browser|
  browser.text.include?("Server Error") and puts "Application exception or 500 error!"
end
browser.goto "watir.com/404"
"Application exception or 500 error!"
browser.after_hooks.delete browser.after_hooks[0]
browser.refresh
# File lib/watir/after_hooks.rb, line 59
def delete(after_hook)
  @after_hooks.delete(after_hook)
end
each(&blk) click to toggle source

Yields each after hook.

@yieldparam [#call] after_hook Object responding to call

# File lib/watir/after_hooks.rb, line 102
def each(&blk)
  @after_hooks.each { |after_hook| blk.call(after_hook) }
end
length() click to toggle source

Returns number of after hooks.

@example

browser.after_hooks.add { puts 'Some after_hook.' }
browser.after_hooks.length
#=> 1

@return [Integer]

# File lib/watir/after_hooks.rb, line 117
def length
  @after_hooks.length
end
Also aliased as: size
run() click to toggle source

Runs after hooks.

# File lib/watir/after_hooks.rb, line 67
def run
  # We can't just rescue exception because Firefox automatically closes alert when exception raised
  return unless @after_hooks.any? && !@browser.alert.exists?

  each { |after_hook| after_hook.call(@browser) }
rescue Selenium::WebDriver::Error::NoSuchWindowError => e
  Watir.logger.info "Could not execute After Hooks because browser window was closed #{e}"
end
size()
Alias for: length
without() { |browser| ... } click to toggle source

Executes a block without running error after hooks.

@example

browser.after_hooks.without do |browser|
  browser.element(name: "new_user_button").click
end

@yield Block that is executed without after hooks being run @yieldparam [Watir::Browser]

# File lib/watir/after_hooks.rb, line 88
def without
  current_after_hooks = @after_hooks
  @after_hooks = []
  yield(@browser)
ensure
  @after_hooks = current_after_hooks
end