Module: Selenium::WebDriver::KeyActions

Included in:
ActionBuilder
Defined in:
lib/selenium/webdriver/common/interactions/key_actions.rb

Instance Method Summary collapse

Instance Method Details

#key_down(key, device: nil) ⇒ ActionBuilder #key_down(element, key, device: nil) ⇒ ActionBuilder

Performs a key press. Does not release the key - subsequent interactions may assume it’s kept pressed. Note that the key is never released implicitly - either ActionBuilder#key_up(key) or ActionBuilder#release_actions must be called to release the key.

Examples:

Press a key


driver.action.key_down(:control).perform

Press a key on an element


el = driver.find_element(id: "some_id")
driver.action.key_down(el, :shift).perform

Overloads:

  • #key_down(key, device: nil) ⇒ ActionBuilder

    Parameters:

    • key (Symbol, String)

      The key to press

    • device (Symbol, String) (defaults to: nil)

      Optional name of the KeyInput device to press the key on

  • #key_down(element, key, device: nil) ⇒ ActionBuilder

    Parameters:

    • element (Element)

      An optional element to move to first

    • key (Symbol, String)

      The key to press

    • device (Symbol, String) (defaults to: nil)

      Optional name of the KeyInput device to press the key on

Returns:



47
48
49
# File 'lib/selenium/webdriver/common/interactions/key_actions.rb', line 47

def key_down(*args, device: nil)
  key_action(*args, action: :create_key_down, device: device)
end

#key_up(key, device: nil) ⇒ ActionBuilder #key_up(element, key, device: nil) ⇒ ActionBuilder

Performs a key release. Releasing a non-depressed key will yield undefined behaviour.

Examples:

Release a key


driver.action.key_up(:shift).perform

Release a key from an element


el = driver.find_element(id: "some_id")
driver.action.key_up(el, :alt).perform

Overloads:

  • #key_up(key, device: nil) ⇒ ActionBuilder

    Parameters:

    • key (Symbol, String)

      The key to press

    • device (Symbol, String) (defaults to: nil)

      Optional name of the KeyInput device to press the key on

  • #key_up(element, key, device: nil) ⇒ ActionBuilder

    Parameters:

    • element (Element)

      An optional element to move to first

    • key (Symbol, String)

      The key to release

    • device (Symbol, String) (defaults to: nil)

      Optional name of the KeyInput device to release the key on

Returns:



74
75
76
# File 'lib/selenium/webdriver/common/interactions/key_actions.rb', line 74

def key_up(*args, device: nil)
  key_action(*args, action: :create_key_up, device: device)
end

#send_keys(keys, device: nil) ⇒ ActionBuilder #send_keys(element, keys, device: nil) ⇒ ActionBuilder

Sends keys to the active element. This differs from calling Element#send_keys(keys) on the active element in two ways:

  • The modifier keys included in this call are not released.

  • There is no attempt to re-focus the element - so send_keys(:tab) for switching elements should work.

Examples:

Send the text “help” to an element


el = driver.find_element(id: "some_id")
driver.action.send_keys(el, "help").perform

Send the text “help” to the currently focused element


driver.action.send_keys("help").perform

Overloads:

  • #send_keys(keys, device: nil) ⇒ ActionBuilder

    Parameters:

    • keys (Array, Symbol, String)

      The key(s) to press and release

    • device (Symbol, String) (defaults to: nil)

      Optional name of the KeyInput device to press and release the keys on

  • #send_keys(element, keys, device: nil) ⇒ ActionBuilder

    Parameters:

    • element (Element)

      An optional element to move to first

    • keys (Array, Symbol, String)

      The key(s) to press and release

    • device (Symbol, String) (defaults to: nil)

      Optional name of the KeyInput device to press and release the keys on

Returns:



104
105
106
107
108
109
110
111
# File 'lib/selenium/webdriver/common/interactions/key_actions.rb', line 104

def send_keys(*args, device: nil)
  click(args.shift) if args.first.is_a? Element
  args.map { |x| x.is_a?(String) ? x.chars : x }.flatten.each do |arg|
    key_down(arg, device: device)
    key_up(arg, device: device)
  end
  self
end