Class: Capybara::Lightpanda::Keyboard
- Inherits:
-
Object
- Object
- Capybara::Lightpanda::Keyboard
- Defined in:
- lib/capybara/lightpanda/keyboard.rb
Overview
rubocop:disable Metrics/ClassLength
Constant Summary collapse
- KEYS =
Capybara symbol -> CDP key definition.
{ cancel: { key: "Cancel", code: "Abort", keyCode: 3 }, help: { key: "Help", code: "Help", keyCode: 6 }, backspace: { key: "Backspace", code: "Backspace", keyCode: 8 }, tab: { key: "Tab", code: "Tab", keyCode: 9 }, clear: { key: "Clear", code: "NumLock", keyCode: 12 }, return: { key: "Enter", code: "Enter", keyCode: 13, text: "\r" }, enter: { key: "Enter", code: "Enter", keyCode: 13, text: "\r" }, shift: { key: "Shift", code: "ShiftLeft", keyCode: 16 }, control: { key: "Control", code: "ControlLeft", keyCode: 17 }, alt: { key: "Alt", code: "AltLeft", keyCode: 18 }, pause: { key: "Pause", code: "Pause", keyCode: 19 }, escape: { key: "Escape", code: "Escape", keyCode: 27 }, space: { key: " ", code: "Space", keyCode: 32, text: " " }, page_up: { key: "PageUp", code: "PageUp", keyCode: 33 }, page_down: { key: "PageDown", code: "PageDown", keyCode: 34 }, end: { key: "End", code: "End", keyCode: 35 }, home: { key: "Home", code: "Home", keyCode: 36 }, left: { key: "ArrowLeft", code: "ArrowLeft", keyCode: 37 }, up: { key: "ArrowUp", code: "ArrowUp", keyCode: 38 }, right: { key: "ArrowRight", code: "ArrowRight", keyCode: 39 }, down: { key: "ArrowDown", code: "ArrowDown", keyCode: 40 }, insert: { key: "Insert", code: "Insert", keyCode: 45 }, delete: { key: "Delete", code: "Delete", keyCode: 46 }, semicolon: { key: ";", code: "Semicolon", keyCode: 186, text: ";" }, equals: { key: "=", code: "Equal", keyCode: 187, text: "=" }, numpad0: { key: "0", code: "Numpad0", keyCode: 96, text: "0" }, numpad1: { key: "1", code: "Numpad1", keyCode: 97, text: "1" }, numpad2: { key: "2", code: "Numpad2", keyCode: 98, text: "2" }, numpad3: { key: "3", code: "Numpad3", keyCode: 99, text: "3" }, numpad4: { key: "4", code: "Numpad4", keyCode: 100, text: "4" }, numpad5: { key: "5", code: "Numpad5", keyCode: 101, text: "5" }, numpad6: { key: "6", code: "Numpad6", keyCode: 102, text: "6" }, numpad7: { key: "7", code: "Numpad7", keyCode: 103, text: "7" }, numpad8: { key: "8", code: "Numpad8", keyCode: 104, text: "8" }, numpad9: { key: "9", code: "Numpad9", keyCode: 105, text: "9" }, multiply: { key: "*", code: "NumpadMultiply", keyCode: 106, text: "*" }, add: { key: "+", code: "NumpadAdd", keyCode: 107, text: "+" }, separator: { key: ".", code: "NumpadDecimal", keyCode: 110, text: "." }, subtract: { key: "-", code: "NumpadSubtract", keyCode: 109, text: "-" }, decimal: { key: ".", code: "NumpadDecimal", keyCode: 110, text: "." }, divide: { key: "/", code: "NumpadDivide", keyCode: 111, text: "/" }, f1: { key: "F1", code: "F1", keyCode: 112 }, f2: { key: "F2", code: "F2", keyCode: 113 }, f3: { key: "F3", code: "F3", keyCode: 114 }, f4: { key: "F4", code: "F4", keyCode: 115 }, f5: { key: "F5", code: "F5", keyCode: 116 }, f6: { key: "F6", code: "F6", keyCode: 117 }, f7: { key: "F7", code: "F7", keyCode: 118 }, f8: { key: "F8", code: "F8", keyCode: 119 }, f9: { key: "F9", code: "F9", keyCode: 120 }, f10: { key: "F10", code: "F10", keyCode: 121 }, f11: { key: "F11", code: "F11", keyCode: 122 }, f12: { key: "F12", code: "F12", keyCode: 123 }, meta: { key: "Meta", code: "MetaLeft", keyCode: 91 }, command: { key: "Meta", code: "MetaLeft", keyCode: 91 }, }.freeze
- MODIFIERS =
{ alt: 1, control: 2, ctrl: 2, meta: 4, command: 4, shift: 8, }.freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(browser) ⇒ Keyboard
constructor
A new instance of Keyboard.
-
#type(*keys) ⇒ Object
A top-level modifier symbol (‘:shift`, `:ctrl`, `:alt`, `:meta`) is held for the remainder of the call — `send_keys(’ocean’, :shift, ‘side’)‘ types `oceanSIDE`.
Constructor Details
#initialize(browser) ⇒ Keyboard
Returns a new instance of Keyboard.
89 90 91 |
# File 'lib/capybara/lightpanda/keyboard.rb', line 89 def initialize(browser) @browser = browser end |
Class Method Details
.shifted(char) ⇒ Object
85 86 87 |
# File 'lib/capybara/lightpanda/keyboard.rb', line 85 def self.shifted(char) SHIFT_MAP[char] || char.upcase end |
Instance Method Details
#type(*keys) ⇒ Object
A top-level modifier symbol (‘:shift`, `:ctrl`, `:alt`, `:meta`) is held for the remainder of the call — `send_keys(’ocean’, :shift, ‘side’)‘ types `oceanSIDE`. Modifier presses fire `keyDown` (not `rawKeyDown`) so JS keydown handlers see the modifier event; CDP’s ‘rawKeyDown` is documented as “no JS keyDown event is generated” and would hide the modifier from listeners that count keydown events.
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/capybara/lightpanda/keyboard.rb', line 99 def type(*keys) active_mods = [] keys.each do |key| case key when Symbol if MODIFIERS.key?(key) press_modifier(key, active_mods) else dispatch_key_with_mods(key, active_mods) end when String key.each_char { |char| dispatch_char_with_mods(char, active_mods) } when Array type_with_modifiers(key) end end release_modifiers(active_mods) end |