selenium-webdriver 2.53.3 → 3.142.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +665 -8
  3. data/Gemfile +2 -0
  4. data/LICENSE +1 -1
  5. data/README.md +2 -3
  6. data/lib/selenium/server.rb +76 -73
  7. data/lib/selenium/webdriver/atoms/getAttribute.js +7 -0
  8. data/lib/selenium/webdriver/atoms/isDisplayed.js +102 -0
  9. data/lib/selenium/webdriver/{phantomjs.rb → atoms.rb} +10 -14
  10. data/lib/selenium/webdriver/chrome/bridge.rb +30 -101
  11. data/lib/selenium/webdriver/chrome/driver.rb +127 -0
  12. data/lib/selenium/webdriver/chrome/options.rb +190 -0
  13. data/lib/selenium/webdriver/chrome/profile.rb +21 -20
  14. data/lib/selenium/webdriver/chrome/service.rb +26 -93
  15. data/lib/selenium/webdriver/chrome.rb +15 -6
  16. data/lib/selenium/webdriver/common/action_builder.rb +52 -58
  17. data/lib/selenium/webdriver/common/alert.rb +7 -15
  18. data/lib/selenium/webdriver/common/bridge_helper.rb +18 -22
  19. data/lib/selenium/webdriver/common/driver.rb +72 -72
  20. data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +45 -0
  21. data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +50 -0
  22. data/lib/selenium/webdriver/common/driver_extensions/{has_input_devices.rb → has_debugger.rb} +11 -27
  23. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +6 -10
  24. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +51 -0
  25. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +7 -8
  26. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +51 -0
  27. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +2 -4
  28. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +2 -4
  29. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +3 -5
  30. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +2 -5
  31. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +6 -9
  32. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +9 -7
  33. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +3 -8
  34. data/lib/selenium/webdriver/common/element.rb +59 -39
  35. data/lib/selenium/webdriver/common/error.rb +259 -104
  36. data/lib/selenium/webdriver/common/file_reaper.rb +6 -14
  37. data/lib/selenium/webdriver/common/html5/local_storage.rb +8 -10
  38. data/lib/selenium/webdriver/common/html5/session_storage.rb +8 -10
  39. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +8 -16
  40. data/lib/selenium/webdriver/common/interactions/input_device.rb +54 -0
  41. data/lib/selenium/webdriver/common/interactions/interaction.rb +53 -0
  42. data/lib/selenium/webdriver/{safari/browser.rb → common/interactions/interactions.rb} +17 -14
  43. data/lib/selenium/webdriver/common/interactions/key_actions.rb +145 -0
  44. data/lib/selenium/webdriver/common/interactions/key_input.rb +66 -0
  45. data/lib/selenium/webdriver/{android.rb → common/interactions/none_input.rb} +14 -6
  46. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +363 -0
  47. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +139 -0
  48. data/lib/selenium/webdriver/common/keyboard.rb +10 -14
  49. data/lib/selenium/webdriver/common/keys.rb +102 -82
  50. data/lib/selenium/webdriver/common/log_entry.rb +7 -8
  51. data/lib/selenium/webdriver/common/logger.rb +115 -0
  52. data/lib/selenium/webdriver/common/logs.rb +4 -6
  53. data/lib/selenium/webdriver/common/manager.rb +177 -0
  54. data/lib/selenium/webdriver/common/mouse.rb +12 -14
  55. data/lib/selenium/webdriver/common/navigation.rb +4 -6
  56. data/lib/selenium/webdriver/common/options.rb +26 -127
  57. data/lib/selenium/webdriver/common/platform.rb +75 -101
  58. data/lib/selenium/webdriver/common/port_prober.rb +7 -19
  59. data/lib/selenium/webdriver/common/profile_helper.rb +8 -11
  60. data/lib/selenium/webdriver/common/proxy.rb +68 -74
  61. data/lib/selenium/webdriver/common/search_context.rb +28 -37
  62. data/lib/selenium/webdriver/common/service.rb +219 -0
  63. data/lib/selenium/webdriver/common/socket_lock.rb +15 -16
  64. data/lib/selenium/webdriver/common/socket_poller.rb +30 -28
  65. data/lib/selenium/webdriver/common/target_locator.rb +16 -18
  66. data/lib/selenium/webdriver/common/timeouts.rb +6 -8
  67. data/lib/selenium/webdriver/common/touch_action_builder.rb +5 -10
  68. data/lib/selenium/webdriver/common/touch_screen.rb +22 -23
  69. data/lib/selenium/webdriver/common/w3c_action_builder.rb +212 -0
  70. data/lib/selenium/webdriver/common/w3c_manager.rb +45 -0
  71. data/lib/selenium/webdriver/common/wait.rb +17 -16
  72. data/lib/selenium/webdriver/common/window.rb +50 -17
  73. data/lib/selenium/webdriver/common/zipper.rb +9 -13
  74. data/lib/selenium/webdriver/common.rb +21 -7
  75. data/lib/selenium/webdriver/edge/bridge.rb +34 -63
  76. data/lib/selenium/webdriver/edge/driver.rb +66 -0
  77. data/lib/selenium/webdriver/edge/options.rb +80 -0
  78. data/lib/selenium/webdriver/edge/service.rb +23 -95
  79. data/lib/selenium/webdriver/edge.rb +13 -13
  80. data/lib/selenium/webdriver/firefox/binary.rb +45 -60
  81. data/lib/selenium/webdriver/firefox/driver.rb +50 -0
  82. data/lib/selenium/webdriver/firefox/extension/prefs.json +3 -12
  83. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  84. data/lib/selenium/webdriver/firefox/extension.rb +20 -10
  85. data/lib/selenium/webdriver/firefox/launcher.rb +16 -22
  86. data/lib/selenium/webdriver/firefox/legacy/driver.rb +83 -0
  87. data/lib/selenium/webdriver/firefox/marionette/bridge.rb +49 -0
  88. data/lib/selenium/webdriver/firefox/marionette/driver.rb +90 -0
  89. data/lib/selenium/webdriver/firefox/options.rb +162 -0
  90. data/lib/selenium/webdriver/firefox/profile.rb +47 -48
  91. data/lib/selenium/webdriver/firefox/profiles_ini.rb +11 -18
  92. data/lib/selenium/webdriver/firefox/service.rb +24 -95
  93. data/lib/selenium/webdriver/firefox/util.rb +2 -4
  94. data/lib/selenium/webdriver/firefox.rb +27 -12
  95. data/lib/selenium/webdriver/ie/driver.rb +85 -0
  96. data/lib/selenium/webdriver/ie/options.rb +138 -0
  97. data/lib/selenium/webdriver/ie/service.rb +54 -0
  98. data/lib/selenium/webdriver/ie.rb +12 -10
  99. data/lib/selenium/webdriver/remote/bridge.rb +100 -564
  100. data/lib/selenium/webdriver/remote/capabilities.rb +98 -100
  101. data/lib/selenium/webdriver/remote/driver.rb +51 -0
  102. data/lib/selenium/webdriver/remote/http/common.rb +34 -22
  103. data/lib/selenium/webdriver/remote/http/curb.rb +13 -14
  104. data/lib/selenium/webdriver/remote/http/default.rb +62 -43
  105. data/lib/selenium/webdriver/remote/http/persistent.rb +12 -9
  106. data/lib/selenium/webdriver/remote/oss/bridge.rb +594 -0
  107. data/lib/selenium/webdriver/remote/oss/commands.rb +223 -0
  108. data/lib/selenium/webdriver/remote/response.rb +48 -28
  109. data/lib/selenium/webdriver/remote/server_error.rb +3 -5
  110. data/lib/selenium/webdriver/remote/w3c/bridge.rb +605 -0
  111. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +310 -0
  112. data/lib/selenium/webdriver/remote/w3c/commands.rb +157 -0
  113. data/lib/selenium/webdriver/remote.rb +10 -16
  114. data/lib/selenium/webdriver/safari/bridge.rb +17 -101
  115. data/lib/selenium/webdriver/{firefox/w3c_bridge.rb → safari/driver.rb} +27 -25
  116. data/lib/selenium/webdriver/safari/options.rb +29 -31
  117. data/lib/selenium/webdriver/safari/service.rb +38 -0
  118. data/lib/selenium/webdriver/safari.rb +27 -27
  119. data/lib/selenium/webdriver/support/abstract_event_listener.rb +19 -4
  120. data/lib/selenium/webdriver/support/block_event_listener.rb +3 -5
  121. data/lib/selenium/webdriver/support/color.rb +60 -43
  122. data/lib/selenium/webdriver/support/escaper.rb +43 -0
  123. data/lib/selenium/webdriver/support/event_firing_bridge.rb +39 -41
  124. data/lib/selenium/webdriver/support/select.rb +45 -97
  125. data/lib/selenium/webdriver/support.rb +3 -2
  126. data/lib/selenium/webdriver/{iphone.rb → version.rb} +3 -7
  127. data/lib/selenium/webdriver.rb +36 -23
  128. data/lib/selenium-webdriver.rb +2 -2
  129. data/selenium-webdriver.gemspec +42 -29
  130. metadata +331 -262
  131. data/lib/selenium/client/base.rb +0 -151
  132. data/lib/selenium/client/driver.rb +0 -29
  133. data/lib/selenium/client/errors.rb +0 -28
  134. data/lib/selenium/client/extensions.rb +0 -132
  135. data/lib/selenium/client/idiomatic.rb +0 -507
  136. data/lib/selenium/client/javascript_expression_builder.rb +0 -135
  137. data/lib/selenium/client/javascript_frameworks/jquery.rb +0 -32
  138. data/lib/selenium/client/javascript_frameworks/prototype.rb +0 -32
  139. data/lib/selenium/client/legacy_driver.rb +0 -1722
  140. data/lib/selenium/client/protocol.rb +0 -123
  141. data/lib/selenium/client/selenium_helper.rb +0 -49
  142. data/lib/selenium/client.rb +0 -57
  143. data/lib/selenium/rake/server_task.rb +0 -176
  144. data/lib/selenium/webdriver/android/bridge.rb +0 -68
  145. data/lib/selenium/webdriver/common/core_ext/base64.rb +0 -28
  146. data/lib/selenium/webdriver/common/core_ext/dir.rb +0 -61
  147. data/lib/selenium/webdriver/common/html5/location.rb +0 -19
  148. data/lib/selenium/webdriver/common/w3c_error.rb +0 -194
  149. data/lib/selenium/webdriver/edge/legacy_support.rb +0 -117
  150. data/lib/selenium/webdriver/firefox/bridge.rb +0 -89
  151. data/lib/selenium/webdriver/ie/bridge.rb +0 -88
  152. data/lib/selenium/webdriver/ie/server.rb +0 -133
  153. data/lib/selenium/webdriver/iphone/bridge.rb +0 -64
  154. data/lib/selenium/webdriver/phantomjs/bridge.rb +0 -78
  155. data/lib/selenium/webdriver/phantomjs/service.rb +0 -130
  156. data/lib/selenium/webdriver/remote/commands.rb +0 -211
  157. data/lib/selenium/webdriver/remote/w3c_bridge.rb +0 -668
  158. data/lib/selenium/webdriver/remote/w3c_capabilities.rb +0 -236
  159. data/lib/selenium/webdriver/remote/w3c_commands.rb +0 -132
  160. data/lib/selenium/webdriver/safari/resources/client.js +0 -7255
  161. data/lib/selenium/webdriver/safari/server.rb +0 -187
  162. data/lib/selenium-client.rb +0 -21
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ require 'securerandom'
21
+
22
+ module Selenium
23
+ module WebDriver
24
+ module Interactions
25
+ class InputDevice
26
+ attr_reader :name, :actions
27
+
28
+ def initialize(name = nil)
29
+ @name = name || SecureRandom.uuid
30
+ @actions = []
31
+ end
32
+
33
+ def add_action(action)
34
+ raise TypeError, "#{action.inspect} is not a valid action" unless action.class < Interaction
35
+
36
+ @actions << action
37
+ end
38
+
39
+ def clear_actions
40
+ @actions.clear
41
+ end
42
+
43
+ def create_pause(duration = 0)
44
+ add_action(Pause.new(self, duration))
45
+ end
46
+
47
+ def no_actions? # Determine if only pauses are present
48
+ actions = @actions.reject { |action| action.type == Interaction::PAUSE }
49
+ actions.empty?
50
+ end
51
+ end # InputDevice
52
+ end # Interactions
53
+ end # WebDriver
54
+ end # Selenium
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ module Selenium
21
+ module WebDriver
22
+ module Interactions
23
+ class Interaction
24
+ PAUSE = :pause
25
+
26
+ attr_reader :source
27
+
28
+ def initialize(source)
29
+ raise TypeError, "#{source.type} is not a valid input type" unless Interactions::SOURCE_TYPES.include? source.type
30
+
31
+ @source = source
32
+ end
33
+ end
34
+
35
+ class Pause < Interaction
36
+ def initialize(source, duration = nil)
37
+ super(source)
38
+ @duration = duration
39
+ end
40
+
41
+ def type
42
+ PAUSE
43
+ end
44
+
45
+ def encode
46
+ output = {type: type}
47
+ output[:duration] = (@duration * 1000).to_i if @duration
48
+ output
49
+ end
50
+ end # Interaction
51
+ end # Interactions
52
+ end # WebDriver
53
+ end # Selenium
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
4
  # or more contributor license agreements. See the NOTICE file
5
5
  # distributed with this work for additional information
@@ -19,22 +19,25 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
- module Safari
22
+ module Interactions
23
+ KEY = :key
24
+ POINTER = :pointer
25
+ NONE = :none
26
+ SOURCE_TYPES = [KEY, POINTER, NONE].freeze
23
27
 
24
- class Browser
25
- def start(*args)
26
- Platform.exit_hook { stop } # make sure we don't leave the browser running
27
-
28
- @process = ChildProcess.new(Safari.path, *args)
29
- @process.io.inherit! if $DEBUG
30
- @process.start
28
+ class << self
29
+ def key(name)
30
+ KeyInput.new(name)
31
31
  end
32
32
 
33
- def stop
34
- @process.stop if @process
33
+ def pointer(kind, **kwargs)
34
+ PointerInput.new(kind, **kwargs)
35
35
  end
36
36
 
37
- end # Browser
38
- end # Safari
37
+ def none(name = nil)
38
+ NoneInput.new(name)
39
+ end
40
+ end
41
+ end # Interactions
39
42
  end # WebDriver
40
43
  end # Selenium
@@ -0,0 +1,145 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ module Selenium
21
+ module WebDriver
22
+ module KeyActions
23
+ #
24
+ # Performs a key press. Does not release the key - subsequent interactions may assume it's kept pressed.
25
+ # Note that the key is never released implicitly - either W3CActionBuilder#key_up(key) or W3CActionBuilder#release_actions
26
+ # must be called to release the key.
27
+ #
28
+ # @example Press a key
29
+ #
30
+ # driver.action.key_down(:control).perform
31
+ #
32
+ # @example Press a key on an element
33
+ #
34
+ # el = driver.find_element(id: "some_id")
35
+ # driver.action.key_down(el, :shift).perform
36
+ #
37
+ # @overload key_down(key, device: nil)
38
+ # @param [Symbol, String] key The key to press
39
+ # @param [Symbol, String] device Optional name of the KeyInput device to press the key on
40
+ # @overload key_down(element, key, device: nil)
41
+ # @param [Element] element An optional element to move to first
42
+ # @param [Symbol, String] key The key to press
43
+ # @param [Symbol, String] device Optional name of the KeyInput device to press the key on
44
+ # @return [W3CActionBuilder] A self reference
45
+ #
46
+
47
+ def key_down(*args, device: nil)
48
+ key_action(*args, action: :create_key_down, device: device)
49
+ end
50
+
51
+ #
52
+ # Performs a key release.
53
+ # Releasing a non-depressed key will yield undefined behaviour.
54
+ #
55
+ # @example Release a key
56
+ #
57
+ # driver.action.key_up(:shift).perform
58
+ #
59
+ # @example Release a key from an element
60
+ #
61
+ # el = driver.find_element(id: "some_id")
62
+ # driver.action.key_up(el, :alt).perform
63
+ #
64
+ # @overload key_up(key, device: nil)
65
+ # @param [Symbol, String] key The key to press
66
+ # @param [Symbol, String] device Optional name of the KeyInput device to press the key on
67
+ # @overload key_up(element, key, device: nil)
68
+ # @param [Element] element An optional element to move to first
69
+ # @param [Symbol, String] key The key to release
70
+ # @param [Symbol, String] device Optional name of the KeyInput device to release the key on
71
+ # @return [W3CActionBuilder] A self reference
72
+ #
73
+
74
+ def key_up(*args, device: nil)
75
+ key_action(*args, action: :create_key_up, device: device)
76
+ end
77
+
78
+ #
79
+ # Sends keys to the active element. This differs from calling
80
+ # Element#send_keys(keys) on the active element in two ways:
81
+ #
82
+ # * The modifier keys included in this call are not released.
83
+ # * There is no attempt to re-focus the element - so send_keys(:tab) for switching elements should work.
84
+ #
85
+ # @example Send the text "help" to an element
86
+ #
87
+ # el = driver.find_element(id: "some_id")
88
+ # driver.action.send_keys(el, "help").perform
89
+ #
90
+ # @example Send the text "help" to the currently focused element
91
+ #
92
+ # driver.action.send_keys("help").perform
93
+ #
94
+ # @overload send_keys(keys, device: nil)
95
+ # @param [Array, Symbol, String] keys The key(s) to press and release
96
+ # @param [Symbol, String] device Optional name of the KeyInput device to press and release the keys on
97
+ # @overload send_keys(element, keys, device: nil)
98
+ # @param [Element] element An optional element to move to first
99
+ # @param [Array, Symbol, String] keys The key(s) to press and release
100
+ # @param [Symbol, String] device Optional name of the KeyInput device to press and release the keys on
101
+ # @return [W3CActionBuilder] A self reference
102
+ #
103
+
104
+ def send_keys(*args, device: nil)
105
+ click(args.shift) if args.first.is_a? Element
106
+ args.map { |x| x.is_a?(String) ? x.chars : x }.flatten.each do |arg|
107
+ key_down(arg, device: device)
108
+ key_up(arg, device: device)
109
+ end
110
+ self
111
+ end
112
+
113
+ private
114
+
115
+ #
116
+ # @api private
117
+ #
118
+ # @overload key_down(key, action: nil, device: nil)
119
+ # @param [Symbol, String] key The key to press
120
+ # @param [Symbol] action The name of the key action to perform
121
+ # @param [Symbol, String] device Optional name of the KeyInput device to press the key on
122
+ # @overload key_down(element, key, action: nil, device: nil)
123
+ # @param [Element] element An optional element to move to first
124
+ # @param [Symbol, String] key The key to press
125
+ # @param [Symbol] action The name of the key action to perform
126
+ # @param [Symbol, String] device Optional name of the KeyInput device to press the key on
127
+ #
128
+ # @param [Array] args
129
+ # @option args [Element] element An optional element to move to first
130
+ # @option args [Symbol, String] key The key to perform the action with
131
+ # @param [Symbol] action The name of the key action to perform
132
+ # @param [Symbol, String] device optional name of the KeyInput device to press the key on
133
+ # @return [W3CActionBuilder] A self reference
134
+ #
135
+
136
+ def key_action(*args, action: nil, device: nil)
137
+ key_input = get_device(device) || key_inputs.first
138
+ click(args.shift) if args.first.is_a? Element
139
+ key_input.send(action, args.last)
140
+ tick(key_input)
141
+ self
142
+ end
143
+ end # KeyActions
144
+ end # WebDriver
145
+ end # Selenium
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ module Selenium
21
+ module WebDriver
22
+ module Interactions
23
+ class KeyInput < InputDevice
24
+ SUBTYPES = {down: :keyDown, up: :keyUp, pause: :pause}.freeze
25
+
26
+ def type
27
+ Interactions::KEY
28
+ end
29
+
30
+ def encode
31
+ return nil if no_actions?
32
+
33
+ {type: type, id: name, actions: @actions.map(&:encode)}
34
+ end
35
+
36
+ def create_key_down(key)
37
+ add_action(TypingInteraction.new(self, :down, key))
38
+ end
39
+
40
+ def create_key_up(key)
41
+ add_action(TypingInteraction.new(self, :up, key))
42
+ end
43
+
44
+ class TypingInteraction < Interaction
45
+ attr_reader :type
46
+
47
+ def initialize(source, type, key)
48
+ super(source)
49
+ @type = assert_type(type)
50
+ @key = Keys.encode_key(key)
51
+ end
52
+
53
+ def assert_type(type)
54
+ raise TypeError, "#{type.inspect} is not a valid key subtype" unless KeyInput::SUBTYPES.key? type
55
+
56
+ KeyInput::SUBTYPES[type]
57
+ end
58
+
59
+ def encode
60
+ {type: @type, value: @key}
61
+ end
62
+ end # TypingInteraction
63
+ end # KeyInput
64
+ end # Interactions
65
+ end # WebDriver
66
+ end # Selenium
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
4
  # or more contributor license agreements. See the NOTICE file
5
5
  # distributed with this work for additional information
@@ -19,10 +19,18 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
- module Android
22
+ module Interactions
23
+ class NoneInput < InputDevice
24
+ def type
25
+ Interactions::NONE
26
+ end
23
27
 
24
- end # Android
28
+ def encode
29
+ return nil if no_actions?
30
+
31
+ {type: type, id: name, actions: @actions.map(&:encode)}
32
+ end
33
+ end # NoneInput
34
+ end # Interactions
25
35
  end # WebDriver
26
36
  end # Selenium
27
-
28
- require 'selenium/webdriver/android/bridge'