class Selenium::WebDriver::ActionBuilder

The ActionBuilder provides the user a way to set up and perform complex user interactions.

This class should not be instantiated directly, but is created by Selenium::WebDriver::DriverExtensions::HasInputDevices#action, which is available on Driver instances that support the user interaction API.

Example:

driver.action.key_down(:shift).
              click(element).
              click(second_element).
              key_up(:shift).
              drag_and_drop(element, third_element).
              perform

Public Class Methods

new(mouse, keyboard) click to toggle source

@api private

# File lib/selenium/webdriver/common/action_builder.rb, line 28
def initialize(mouse, keyboard)
  @devices    = {
    :mouse    => mouse,
    :keyboard => keyboard
  }

  @actions  = []
end

Public Instance Methods

click(element = nil) click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 74
def click(element = nil)
  @actions << [:mouse, :click, [element]]
  self
end
click_and_hold(element) click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 64
def click_and_hold(element)
  @actions << [:mouse, :down, [element]]
  self
end
context_click(element = nil) click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 99
def context_click(element = nil)
  @actions << [:mouse, :context_click, [element]]
  self
end
double_click(element = nil) click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 79
def double_click(element = nil)
  @actions << [:mouse, :double_click, [element]]
  self
end
drag_and_drop(source, target) click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 104
def drag_and_drop(source, target)
  click_and_hold source
  move_to        target
  release        target

  self
end
drag_and_drop_by(source, right_by, down_by) click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 112
def drag_and_drop_by(source, right_by, down_by)
  click_and_hold source
  move_by        right_by, down_by
  release

  self
end
key_down(*args) click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 37
def key_down(*args)
  if args.first.kind_of? Element
    @actions << [:mouse, :click, [args.shift]]
  end

  @actions << [:keyboard, :press, args]
  self
end
key_up(*args) click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 46
def key_up(*args)
  if args.first.kind_of? Element
    @actions << [:mouse, :click, [args.shift]]
  end

  @actions << [:keyboard, :release, args]
  self
end
move_by(right_by, down_by) click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 94
def move_by(right_by, down_by)
  @actions << [:mouse, :move_by, [right_by, down_by]]
  self
end
move_to(element, right_by = nil, down_by = nil) click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 84
def move_to(element, right_by = nil, down_by = nil)
  if right_by && down_by
    @actions << [:mouse, :move_to, [element, right_by, down_by]]
  else
    @actions << [:mouse, :move_to, [element]]
  end

  self
end
perform() click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 120
def perform
  @actions.each { |receiver, method, args|
    @devices.fetch(receiver).__send__(method, *args)
  }
end
release(element = nil) click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 69
def release(element = nil)
  @actions << [:mouse, :up, [element]]
  self
end
send_keys(*args) click to toggle source
# File lib/selenium/webdriver/common/action_builder.rb, line 55
def send_keys(*args)
  if args.first.kind_of? Element
    @actions << [:mouse, :click, [args.shift]]
  end

  @actions << [:keyboard, :send_keys, args]
  self
end