class Capybara::Playwright::Node::SendKeys

Constants

KEYS
MODIFIERS

Public Class Methods

new(element_or_keyboard, keys) click to toggle source
# File lib/capybara/playwright/node.rb, line 512
def initialize(element_or_keyboard, keys)
  @element_or_keyboard = element_or_keyboard

  holding_keys = []
  @executables = keys.each_with_object([]) do |key, executables|
    if MODIFIERS[key]
      holding_keys << key
    else
      if holding_keys.empty?
        case key
        when String
          executables << TypeText.new(key)
        when Symbol
          executables << PressKey.new(
            key: key_for(key),
            modifiers: [],
          )
        when Array
          _key = key.last
          code =
            if _key.is_a?(String) && _key.length == 1
              _key.upcase
            elsif _key.is_a?(Symbol)
              key_for(_key)
            else
              raise ArgumentError.new("invalid key: #{_key}. Symbol of 1-length String is expected.")
            end
          modifiers = key.first(key.size - 1).map { |k| modifier_for(k) }
          executables << PressKey.new(
            key: code,
            modifiers: modifiers,
          )
        end
      else
        modifiers = holding_keys.map { |k| modifier_for(k) }

        case key
        when String
          key.each_char do |char|
            executables << PressKey.new(
              key: char.upcase,
              modifiers: modifiers,
            )
          end
        when Symbol
          executables << PressKey.new(
            key: key_for(key),
            modifiers: modifiers
          )
        else
          raise ArgumentError.new("#{key} cannot be handled with holding key #{holding_keys}")
        end
      end
    end
  end
end

Public Instance Methods

execute() click to toggle source
# File lib/capybara/playwright/node.rb, line 577
def execute
  @executables.each do |executable|
    executable.execute_for(@element_or_keyboard)
  end
end

Private Instance Methods

key_for(key) click to toggle source
# File lib/capybara/playwright/node.rb, line 573
        def key_for(key)
  KEYS[key] or raise ArgumentError.new("invalid key specified: #{key}")
end
modifier_for(modifier) click to toggle source
# File lib/capybara/playwright/node.rb, line 569
        def modifier_for(modifier)
  MODIFIERS[modifier] or raise ArgumentError.new("invalid modifier specified: #{modifier}")
end