Class: Capybara::Apparition::Keyboard

Inherits:
Object
  • Object
show all
Defined in:
lib/capybara/apparition/keyboard.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(page) ⇒ Keyboard

Returns a new instance of Keyboard.



7
8
9
10
11
# File 'lib/capybara/apparition/keyboard.rb', line 7

def initialize(page)
  @page = page
  @modifiers = 0
  @pressed_keys = {}
end

Instance Attribute Details

#modifiersObject (readonly)

Returns the value of attribute modifiers.



5
6
7
# File 'lib/capybara/apparition/keyboard.rb', line 5

def modifiers
  @modifiers
end

Instance Method Details

#down(description) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/capybara/apparition/keyboard.rb', line 28

def down(description)
  @modifiers |= modifier_bit(description.key)
  @pressed_keys[description.key] = description

  @page.command('Input.dispatchKeyEvent',
                type: 'keyDown',
                modifiers: @modifiers,
                windowsVirtualKeyCode: description.keyCode,
                code: description.code,
                key: description.key,
                text: description.text,
                unmodifiedText: description.text,
                autoRepeat: false,
                location: description.location,
                isKeypad: description.location == 3)
end

#press(key) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/capybara/apparition/keyboard.rb', line 17

def press(key)
  if key.is_a? Symbol
    orig_key = key
    key = key.to_s.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase.to_sym
    warn "The use of :#{orig_key} is deprecated, please use :#{key} instead" unless key == orig_key
  end
  description = key_description(key)
  down(description)
  up(description) if modifier_bit(description.key).zero?
end

#type(keys) ⇒ Object



13
14
15
# File 'lib/capybara/apparition/keyboard.rb', line 13

def type(keys)
  type_with_modifiers(Array(keys))
end

#up(description) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/capybara/apparition/keyboard.rb', line 45

def up(description)
  @modifiers &= ~modifier_bit(description.key)
  @pressed_keys.delete(description.key)

  @page.command('Input.dispatchKeyEvent',
                type: 'keyUp',
                modifiers: @modifiers,
                key: description.key,
                windowsVirtualKeyCode: description.keyCode,
                code: description.code,
                location: description.location)
end

#yield_with_keys(keys = []) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/capybara/apparition/keyboard.rb', line 58

def yield_with_keys(keys = [])
  old_pressed_keys = @pressed_keys
  @pressed_keys = {}
  keys.each do |key|
    press key
  end
  yield
  release_pressed_keys
  @pressed_keys = old_pressed_keys
end