browserstack-webdriver 0.0.1

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 (202) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +791 -0
  3. data/README.md +31 -0
  4. data/build.desc +334 -0
  5. data/lib/selenium-client.rb +2 -0
  6. data/lib/selenium-webdriver.rb +1 -0
  7. data/lib/selenium/client.rb +37 -0
  8. data/lib/selenium/client/base.rb +132 -0
  9. data/lib/selenium/client/driver.rb +10 -0
  10. data/lib/selenium/client/errors.rb +9 -0
  11. data/lib/selenium/client/extensions.rb +118 -0
  12. data/lib/selenium/client/idiomatic.rb +488 -0
  13. data/lib/selenium/client/javascript_expression_builder.rb +116 -0
  14. data/lib/selenium/client/javascript_frameworks/jquery.rb +13 -0
  15. data/lib/selenium/client/javascript_frameworks/prototype.rb +13 -0
  16. data/lib/selenium/client/legacy_driver.rb +1720 -0
  17. data/lib/selenium/client/protocol.rb +104 -0
  18. data/lib/selenium/client/selenium_helper.rb +34 -0
  19. data/lib/selenium/rake/server_task.rb +157 -0
  20. data/lib/selenium/server.rb +248 -0
  21. data/lib/selenium/webdriver.rb +71 -0
  22. data/lib/selenium/webdriver/android.rb +9 -0
  23. data/lib/selenium/webdriver/android/bridge.rb +47 -0
  24. data/lib/selenium/webdriver/chrome.rb +26 -0
  25. data/lib/selenium/webdriver/chrome/bridge.rb +120 -0
  26. data/lib/selenium/webdriver/chrome/profile.rb +90 -0
  27. data/lib/selenium/webdriver/chrome/service.rb +75 -0
  28. data/lib/selenium/webdriver/common.rb +44 -0
  29. data/lib/selenium/webdriver/common/action_builder.rb +352 -0
  30. data/lib/selenium/webdriver/common/alert.rb +30 -0
  31. data/lib/selenium/webdriver/common/bridge_helper.rb +67 -0
  32. data/lib/selenium/webdriver/common/core_ext/base64.rb +9 -0
  33. data/lib/selenium/webdriver/common/core_ext/dir.rb +42 -0
  34. data/lib/selenium/webdriver/common/core_ext/string.rb +5 -0
  35. data/lib/selenium/webdriver/common/driver.rb +301 -0
  36. data/lib/selenium/webdriver/common/driver_extensions/has_browser_connection.rb +17 -0
  37. data/lib/selenium/webdriver/common/driver_extensions/has_input_devices.rb +39 -0
  38. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +25 -0
  39. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +13 -0
  40. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +22 -0
  41. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +19 -0
  42. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +22 -0
  43. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +45 -0
  44. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +43 -0
  45. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +46 -0
  46. data/lib/selenium/webdriver/common/element.rb +293 -0
  47. data/lib/selenium/webdriver/common/error.rb +207 -0
  48. data/lib/selenium/webdriver/common/file_reaper.rb +47 -0
  49. data/lib/selenium/webdriver/common/html5/local_storage.rb +42 -0
  50. data/lib/selenium/webdriver/common/html5/location.rb +0 -0
  51. data/lib/selenium/webdriver/common/html5/session_storage.rb +44 -0
  52. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +42 -0
  53. data/lib/selenium/webdriver/common/json_helper.rb +34 -0
  54. data/lib/selenium/webdriver/common/keyboard.rb +55 -0
  55. data/lib/selenium/webdriver/common/keys.rb +109 -0
  56. data/lib/selenium/webdriver/common/log_entry.rb +29 -0
  57. data/lib/selenium/webdriver/common/logs.rb +23 -0
  58. data/lib/selenium/webdriver/common/mouse.rb +72 -0
  59. data/lib/selenium/webdriver/common/navigation.rb +43 -0
  60. data/lib/selenium/webdriver/common/options.rb +136 -0
  61. data/lib/selenium/webdriver/common/platform.rb +218 -0
  62. data/lib/selenium/webdriver/common/port_prober.rb +42 -0
  63. data/lib/selenium/webdriver/common/profile_helper.rb +67 -0
  64. data/lib/selenium/webdriver/common/proxy.rb +149 -0
  65. data/lib/selenium/webdriver/common/search_context.rb +92 -0
  66. data/lib/selenium/webdriver/common/socket_poller.rb +105 -0
  67. data/lib/selenium/webdriver/common/target_locator.rb +81 -0
  68. data/lib/selenium/webdriver/common/timeouts.rb +38 -0
  69. data/lib/selenium/webdriver/common/touch_action_builder.rb +64 -0
  70. data/lib/selenium/webdriver/common/touch_screen.rb +105 -0
  71. data/lib/selenium/webdriver/common/wait.rb +63 -0
  72. data/lib/selenium/webdriver/common/window.rb +104 -0
  73. data/lib/selenium/webdriver/common/zipper.rb +82 -0
  74. data/lib/selenium/webdriver/firefox.rb +37 -0
  75. data/lib/selenium/webdriver/firefox/binary.rb +158 -0
  76. data/lib/selenium/webdriver/firefox/bridge.rb +70 -0
  77. data/lib/selenium/webdriver/firefox/extension.rb +52 -0
  78. data/lib/selenium/webdriver/firefox/launcher.rb +106 -0
  79. data/lib/selenium/webdriver/firefox/profile.rb +263 -0
  80. data/lib/selenium/webdriver/firefox/profiles_ini.rb +62 -0
  81. data/lib/selenium/webdriver/firefox/socket_lock.rb +61 -0
  82. data/lib/selenium/webdriver/firefox/util.rb +29 -0
  83. data/lib/selenium/webdriver/ie.rb +19 -0
  84. data/lib/selenium/webdriver/ie/bridge.rb +68 -0
  85. data/lib/selenium/webdriver/ie/server.rb +86 -0
  86. data/lib/selenium/webdriver/iphone.rb +9 -0
  87. data/lib/selenium/webdriver/iphone/bridge.rb +45 -0
  88. data/lib/selenium/webdriver/opera.rb +24 -0
  89. data/lib/selenium/webdriver/opera/bridge.rb +112 -0
  90. data/lib/selenium/webdriver/opera/service.rb +49 -0
  91. data/lib/selenium/webdriver/phantomjs.rb +22 -0
  92. data/lib/selenium/webdriver/phantomjs/bridge.rb +59 -0
  93. data/lib/selenium/webdriver/phantomjs/service.rb +90 -0
  94. data/lib/selenium/webdriver/remote.rb +22 -0
  95. data/lib/selenium/webdriver/remote/bridge.rb +644 -0
  96. data/lib/selenium/webdriver/remote/capabilities.rb +267 -0
  97. data/lib/selenium/webdriver/remote/commands.rb +193 -0
  98. data/lib/selenium/webdriver/remote/http/common.rb +74 -0
  99. data/lib/selenium/webdriver/remote/http/curb.rb +79 -0
  100. data/lib/selenium/webdriver/remote/http/default.rb +139 -0
  101. data/lib/selenium/webdriver/remote/http/persistent.rb +38 -0
  102. data/lib/selenium/webdriver/remote/response.rb +97 -0
  103. data/lib/selenium/webdriver/remote/server_error.rb +17 -0
  104. data/lib/selenium/webdriver/safari.rb +46 -0
  105. data/lib/selenium/webdriver/safari/bridge.rb +110 -0
  106. data/lib/selenium/webdriver/safari/browser.rb +20 -0
  107. data/lib/selenium/webdriver/safari/extension.rb +120 -0
  108. data/lib/selenium/webdriver/safari/server.rb +145 -0
  109. data/lib/selenium/webdriver/support.rb +5 -0
  110. data/lib/selenium/webdriver/support/abstract_event_listener.rb +28 -0
  111. data/lib/selenium/webdriver/support/block_event_listener.rb +17 -0
  112. data/lib/selenium/webdriver/support/color.rb +110 -0
  113. data/lib/selenium/webdriver/support/event_firing_bridge.rb +112 -0
  114. data/lib/selenium/webdriver/support/select.rb +293 -0
  115. data/ruby.iml +13 -0
  116. data/spec/integration/selenium/client/api/backward_compatible_api_spec.rb +22 -0
  117. data/spec/integration/selenium/client/api/browser_xpath_library_spec.rb +17 -0
  118. data/spec/integration/selenium/client/api/click_spec.rb +39 -0
  119. data/spec/integration/selenium/client/api/cookie_spec.rb +39 -0
  120. data/spec/integration/selenium/client/api/element_spec.rb +14 -0
  121. data/spec/integration/selenium/client/api/highlight_located_element_spec.rb +19 -0
  122. data/spec/integration/selenium/client/api/retrieve_last_remote_control_logs_spec.rb +33 -0
  123. data/spec/integration/selenium/client/api/screenshot_spec.rb +31 -0
  124. data/spec/integration/selenium/client/api/select_window_spec.rb +46 -0
  125. data/spec/integration/selenium/client/api/start_stop_spec.rb +9 -0
  126. data/spec/integration/selenium/client/api/wait_for_ajax_spec.rb +27 -0
  127. data/spec/integration/selenium/client/api/wait_for_element_spec.rb +56 -0
  128. data/spec/integration/selenium/client/api/wait_for_field_value_spec.rb +52 -0
  129. data/spec/integration/selenium/client/api/wait_for_text_spec.rb +98 -0
  130. data/spec/integration/selenium/client/api/webdriver_backed_spec.rb +21 -0
  131. data/spec/integration/selenium/client/sample-app/public/jquery-1.3.2.js +4376 -0
  132. data/spec/integration/selenium/client/sample-app/public/jquery.html +55 -0
  133. data/spec/integration/selenium/client/sample-app/public/prototype-1.6.0.3.js +4320 -0
  134. data/spec/integration/selenium/client/sample-app/public/prototype.html +59 -0
  135. data/spec/integration/selenium/client/sample-app/sample_app.rb +32 -0
  136. data/spec/integration/selenium/client/spec_helper.rb +139 -0
  137. data/spec/integration/selenium/webdriver/app_cache_spec.rb +47 -0
  138. data/spec/integration/selenium/webdriver/browser_connection_spec.rb +20 -0
  139. data/spec/integration/selenium/webdriver/chrome/driver_spec.rb +28 -0
  140. data/spec/integration/selenium/webdriver/chrome/profile_spec.rb +63 -0
  141. data/spec/integration/selenium/webdriver/driver_spec.rb +266 -0
  142. data/spec/integration/selenium/webdriver/element_spec.rb +191 -0
  143. data/spec/integration/selenium/webdriver/error_spec.rb +30 -0
  144. data/spec/integration/selenium/webdriver/firefox/driver_spec.rb +21 -0
  145. data/spec/integration/selenium/webdriver/firefox/profile_spec.rb +141 -0
  146. data/spec/integration/selenium/webdriver/keyboard_spec.rb +57 -0
  147. data/spec/integration/selenium/webdriver/location_spec.rb +29 -0
  148. data/spec/integration/selenium/webdriver/mouse_spec.rb +57 -0
  149. data/spec/integration/selenium/webdriver/navigation_spec.rb +46 -0
  150. data/spec/integration/selenium/webdriver/opera/driver_spec.rb +47 -0
  151. data/spec/integration/selenium/webdriver/options_spec.rb +77 -0
  152. data/spec/integration/selenium/webdriver/remote/driver_spec.rb +19 -0
  153. data/spec/integration/selenium/webdriver/remote/element_spec.rb +26 -0
  154. data/spec/integration/selenium/webdriver/spec_helper.rb +36 -0
  155. data/spec/integration/selenium/webdriver/spec_support.rb +12 -0
  156. data/spec/integration/selenium/webdriver/spec_support/guards.rb +110 -0
  157. data/spec/integration/selenium/webdriver/spec_support/helpers.rb +51 -0
  158. data/spec/integration/selenium/webdriver/spec_support/rack_server.rb +123 -0
  159. data/spec/integration/selenium/webdriver/spec_support/test_environment.rb +239 -0
  160. data/spec/integration/selenium/webdriver/sql_database_spec.rb +59 -0
  161. data/spec/integration/selenium/webdriver/storage_spec.rb +96 -0
  162. data/spec/integration/selenium/webdriver/target_locator_spec.rb +186 -0
  163. data/spec/integration/selenium/webdriver/timeout_spec.rb +69 -0
  164. data/spec/integration/selenium/webdriver/touch_spec.rb +176 -0
  165. data/spec/integration/selenium/webdriver/window_spec.rb +70 -0
  166. data/spec/integration/selenium/webdriver/zipper_spec.rb +66 -0
  167. data/spec/unit/selenium/client/base_spec.rb +239 -0
  168. data/spec/unit/selenium/client/extensions_spec.rb +174 -0
  169. data/spec/unit/selenium/client/idiomatic_spec.rb +500 -0
  170. data/spec/unit/selenium/client/javascript_expression_builder_spec.rb +79 -0
  171. data/spec/unit/selenium/client/javascript_frameworks/jquery_spec.rb +10 -0
  172. data/spec/unit/selenium/client/javascript_frameworks/prototype_spec.rb +10 -0
  173. data/spec/unit/selenium/client/protocol_spec.rb +124 -0
  174. data/spec/unit/selenium/client/selenium_helper_spec.rb +56 -0
  175. data/spec/unit/selenium/client/spec_helper.rb +24 -0
  176. data/spec/unit/selenium/rake/task_spec.rb +79 -0
  177. data/spec/unit/selenium/server_spec.rb +150 -0
  178. data/spec/unit/selenium/webdriver/action_builder_spec.rb +97 -0
  179. data/spec/unit/selenium/webdriver/android/bridge_spec.rb +43 -0
  180. data/spec/unit/selenium/webdriver/chrome/bridge_spec.rb +137 -0
  181. data/spec/unit/selenium/webdriver/chrome/profile_spec.rb +57 -0
  182. data/spec/unit/selenium/webdriver/chrome/service_spec.rb +44 -0
  183. data/spec/unit/selenium/webdriver/error_spec.rb +41 -0
  184. data/spec/unit/selenium/webdriver/firefox/bridge_spec.rb +47 -0
  185. data/spec/unit/selenium/webdriver/ie/bridge_spec.rb +91 -0
  186. data/spec/unit/selenium/webdriver/iphone/bridge_spec.rb +42 -0
  187. data/spec/unit/selenium/webdriver/log_entry_spec.rb +11 -0
  188. data/spec/unit/selenium/webdriver/opera/bridge_spec.rb +44 -0
  189. data/spec/unit/selenium/webdriver/phantomjs/bridge_spec.rb +55 -0
  190. data/spec/unit/selenium/webdriver/proxy_spec.rb +106 -0
  191. data/spec/unit/selenium/webdriver/remote/bridge_spec.rb +16 -0
  192. data/spec/unit/selenium/webdriver/remote/capabilities_spec.rb +115 -0
  193. data/spec/unit/selenium/webdriver/remote/http/common_spec.rb +24 -0
  194. data/spec/unit/selenium/webdriver/remote/http/default_spec.rb +124 -0
  195. data/spec/unit/selenium/webdriver/search_context_spec.rb +61 -0
  196. data/spec/unit/selenium/webdriver/socket_poller_spec.rb +68 -0
  197. data/spec/unit/selenium/webdriver/spec_helper.rb +27 -0
  198. data/spec/unit/selenium/webdriver/support/color_spec.rb +119 -0
  199. data/spec/unit/selenium/webdriver/support/event_firing_spec.rb +111 -0
  200. data/spec/unit/selenium/webdriver/support/select_spec.rb +290 -0
  201. data/spec/unit/selenium/webdriver/wait_spec.rb +49 -0
  202. metadata +370 -0
@@ -0,0 +1,207 @@
1
+ module Selenium
2
+ module WebDriver
3
+ module Error
4
+
5
+ class WebDriverError < StandardError; end
6
+ class UnsupportedOperationError < WebDriverError; end
7
+
8
+ class IndexOutOfBoundsError < WebDriverError; end # 1
9
+ class NoCollectionError < WebDriverError; end # 2
10
+ class NoStringError < WebDriverError; end # 3
11
+ class NoStringLengthError < WebDriverError; end # 4
12
+ class NoStringWrapperError < WebDriverError; end # 5
13
+ class NoSuchDriverError < WebDriverError; end # 6
14
+
15
+ #
16
+ # An element could not be located on the page using the given search
17
+ # parameters.
18
+ #
19
+
20
+ class NoSuchElementError < WebDriverError; end # 7
21
+
22
+ #
23
+ # A request to switch to a frame could not be satisfied because the
24
+ # frame could not be found.
25
+ #
26
+
27
+ class NoSuchFrameError < WebDriverError; end # 8
28
+ class UnknownCommandError < WebDriverError; end # 9
29
+
30
+
31
+ #
32
+ # Indicates that a reference to an element is now "stale" - the element
33
+ # no longer appears in the DOM of the page.
34
+ #
35
+
36
+ class StaleElementReferenceError < WebDriverError; end # 10
37
+
38
+ #
39
+ # Raised to indicate that although an element is present on the DOM,
40
+ # it is not visible, and so is not able to be interacted with.
41
+ #
42
+
43
+ class ElementNotVisibleError < WebDriverError; end # 11
44
+
45
+ #
46
+ # Raised when an interaction could not be performed because the element
47
+ # is in an invalid state (e.g. attempting to click a disabled element).
48
+ #
49
+
50
+ class InvalidElementStateError < WebDriverError; end # 12
51
+
52
+ #
53
+ # An unknown server-side error occurred while processing the command.
54
+ #
55
+
56
+ class UnknownError < WebDriverError; end # 13
57
+ class ExpectedError < WebDriverError; end # 14
58
+
59
+ #
60
+ # An attempt was made to select an element that cannot be selected.
61
+ #
62
+
63
+ class ElementNotSelectableError < WebDriverError; end # 15
64
+ class NoSuchDocumentError < WebDriverError; end # 16
65
+
66
+ #
67
+ # An error occurred while executing user supplied JavaScript.
68
+ #
69
+
70
+ class JavascriptError < WebDriverError; end # 17
71
+ class NoScriptResultError < WebDriverError; end # 18
72
+
73
+ #
74
+ # An error occurred while searching for an element by XPath.
75
+ #
76
+
77
+ class XPathLookupError < WebDriverError; end # 19
78
+ class NoSuchCollectionError < WebDriverError; end # 20
79
+
80
+ #
81
+ # Raised when a command does not complete in enough time.
82
+ #
83
+
84
+ class TimeOutError < WebDriverError; end # 21
85
+ class NullPointerError < WebDriverError; end # 22
86
+ class NoSuchWindowError < WebDriverError; end # 23
87
+
88
+ #
89
+ # Raised when attempting to add a cookie under a different domain than
90
+ # the current URL.
91
+ #
92
+
93
+ class InvalidCookieDomainError < WebDriverError; end # 24
94
+
95
+ #
96
+ # Raised when a driver fails to set a cookie.
97
+ #
98
+
99
+ class UnableToSetCookieError < WebDriverError; end # 25
100
+
101
+ #
102
+ # Raised when an alert dialog is present that has not been dealt with.
103
+ #
104
+ class UnhandledAlertError < WebDriverError; end # 26
105
+
106
+ #
107
+ # Indicates that a user has tried to access an alert when one is not present.
108
+ #
109
+
110
+ class NoAlertPresentError < WebDriverError; end # 27
111
+
112
+ #
113
+ # A script did not complete before its timeout expired.
114
+ #
115
+
116
+ class ScriptTimeOutError < WebDriverError; end # 28
117
+
118
+ #
119
+ # The coordinates provided to an interactions operation are invalid.
120
+ #
121
+
122
+ class InvalidElementCoordinatesError < WebDriverError; end # 29
123
+
124
+ #
125
+ # Indicates that IME support is not available. This exception is rasied
126
+ # for every IME-related method call if IME support is not available on
127
+ # the machine.
128
+ #
129
+
130
+ class IMENotAvailableError < WebDriverError; end # 30
131
+
132
+ #
133
+ # Indicates that activating an IME engine has failed.
134
+ #
135
+
136
+ class IMEEngineActivationFailedError < WebDriverError; end # 31
137
+
138
+ #
139
+ # Argument was an invalid selector (e.g. XPath/CSS).
140
+ #
141
+
142
+ class InvalidSelectorError < WebDriverError; end # 32
143
+ # 33
144
+
145
+ #
146
+ # Indicates that the target provided to the actions #move method is
147
+ # invalid, e.g. outside of the bounds of the window.
148
+ #
149
+
150
+ class MoveTargetOutOfBoundsError < WebDriverError; end # 34
151
+
152
+ # @api private
153
+ Errors = [
154
+ IndexOutOfBoundsError, # 1
155
+ NoCollectionError, # 2
156
+ NoStringError, # 3
157
+ NoStringLengthError, # 4
158
+ NoStringWrapperError, # 5
159
+ NoSuchDriverError, # 6
160
+ NoSuchElementError, # 7
161
+ NoSuchFrameError, # 8
162
+ UnknownCommandError, # 9
163
+ StaleElementReferenceError, # 10
164
+ ElementNotVisibleError, # 11
165
+ InvalidElementStateError, # 12
166
+ UnknownError, # 13
167
+ ExpectedError, # 14
168
+ ElementNotSelectableError, # 15
169
+ NoSuchDocumentError, # 16
170
+ JavascriptError, # 17
171
+ NoScriptResultError, # 18
172
+ XPathLookupError, # 19
173
+ NoSuchCollectionError, # 20
174
+ TimeOutError, # 21
175
+ NullPointerError, # 22
176
+ NoSuchWindowError, # 23
177
+ InvalidCookieDomainError, # 24
178
+ UnableToSetCookieError, # 25
179
+ UnhandledAlertError, # 26
180
+ NoAlertPresentError, # 27
181
+ ScriptTimeOutError, # 28
182
+ InvalidElementCoordinatesError, # 29
183
+ IMENotAvailableError, # 30
184
+ IMEEngineActivationFailedError, # 31
185
+ InvalidSelectorError, # 32
186
+ nil, # 33
187
+ MoveTargetOutOfBoundsError # 34
188
+ ]
189
+
190
+ # aliased for backwards compatibility
191
+ ObsoleteElementError = StaleElementReferenceError
192
+ UnhandledError = UnknownError
193
+ UnexpectedJavascriptError = JavascriptError
194
+ NoAlertOpenError = NoAlertPresentError
195
+ ElementNotDisplayedError = ElementNotVisibleError
196
+
197
+ class << self
198
+ def for_code(code)
199
+ return if [nil, 0].include? code
200
+
201
+ Errors[code - 1] || WebDriverError
202
+ end
203
+ end
204
+
205
+ end # Error
206
+ end # WebDriver
207
+ end # Selenium
@@ -0,0 +1,47 @@
1
+ module Selenium
2
+ module WebDriver
3
+
4
+ #
5
+ # @api private
6
+ #
7
+
8
+ module FileReaper
9
+
10
+ class << self
11
+ def reap=(bool)
12
+ @reap = bool
13
+ end
14
+
15
+ def reap?
16
+ @reap = true unless defined?(@reap)
17
+ !!@reap
18
+ end
19
+
20
+ def tmp_files
21
+ @tmp_files ||= []
22
+ end
23
+
24
+ def <<(file)
25
+ tmp_files << file
26
+ end
27
+
28
+ def reap(file)
29
+ return unless reap?
30
+
31
+ unless tmp_files.include?(file)
32
+ raise Error::WebDriverError, "file not added for reaping: #{file.inspect}"
33
+ end
34
+
35
+ FileUtils.rm_rf tmp_files.delete(file)
36
+ end
37
+
38
+ def reap!
39
+ tmp_files.each { |file| FileUtils.rm_rf(file) } if reap?
40
+ end
41
+ end
42
+
43
+ Platform.exit_hook { reap! }
44
+
45
+ end # FileReaper
46
+ end # WebDriver
47
+ end # Selenium
@@ -0,0 +1,42 @@
1
+ module Selenium
2
+ module WebDriver
3
+ module HTML5
4
+
5
+ class LocalStorage
6
+ include SharedWebStorage
7
+
8
+ #
9
+ # @api private
10
+ #
11
+ def initialize(bridge)
12
+ @bridge = bridge
13
+ end
14
+
15
+ def [](key)
16
+ @bridge.getLocalStorageItem key
17
+ end
18
+
19
+ def []=(key, value)
20
+ @bridge.setLocalStorageItem key, value
21
+ end
22
+
23
+ def delete(key)
24
+ @bridge.removeLocalStorageItem key
25
+ end
26
+
27
+ def clear
28
+ @bridge.clearLocalStorage
29
+ end
30
+
31
+ def size
32
+ @bridge.getLocalStorageSize
33
+ end
34
+
35
+ def keys
36
+ @bridge.getLocalStorageKeys.reverse
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+ end
File without changes
@@ -0,0 +1,44 @@
1
+ module Selenium
2
+ module WebDriver
3
+ module HTML5
4
+
5
+ class SessionStorage
6
+ include Enumerable
7
+ include SharedWebStorage
8
+
9
+ def [](key)
10
+ @bridge.getSessionStorageItem key
11
+ end
12
+
13
+ def []=(key, value)
14
+ @bridge.setSessionStorageItem key, value
15
+ end
16
+
17
+ def delete(key)
18
+ @bridge.removeSessionStorageItem key
19
+ end
20
+
21
+ def clear
22
+ @bridge.clearSessionStorage
23
+ end
24
+
25
+ def size
26
+ @bridge.getSessionStorageSize
27
+ end
28
+
29
+ def keys
30
+ @bridge.getSessionStorageKeys.reverse
31
+ end
32
+
33
+ #
34
+ # @api private
35
+ #
36
+
37
+ def initialize(bridge)
38
+ @bridge = bridge
39
+ end
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,42 @@
1
+ module Selenium
2
+ module WebDriver
3
+ module HTML5
4
+
5
+ module SharedWebStorage
6
+ include Enumerable
7
+
8
+ def key?(key)
9
+ keys.include? key
10
+ end
11
+ alias_method :member?, :key?
12
+ alias_method :has_key?, :key?
13
+
14
+ def fetch(key, &blk)
15
+ if self.key? key
16
+ return self[key]
17
+ end
18
+
19
+ if block_given?
20
+ yield key
21
+ else
22
+ # should be KeyError, but it's 1.9-specific
23
+ raise IndexError, "missing key #{key.inspect}"
24
+ end
25
+ end
26
+
27
+ def empty?
28
+ size == 0
29
+ end
30
+
31
+ def each(&blk)
32
+ return enum_for(:each) unless block_given?
33
+
34
+ keys.each do |k|
35
+ yield k, self[k]
36
+ end
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,34 @@
1
+ module Selenium
2
+ module WebDriver
3
+ module JsonHelper
4
+
5
+ # ActiveSupport may define Object#load, so we can't use MultiJson.respond_to? here
6
+ sm = MultiJson.singleton_methods.map { |e| e.to_sym }
7
+
8
+ if sm.include? :load
9
+ # @api private
10
+ def json_load(obj)
11
+ MultiJson.load(obj)
12
+ end
13
+ else
14
+ # @api private
15
+ def json_load(obj)
16
+ MultiJson.decode(obj)
17
+ end
18
+ end
19
+
20
+ if sm.include? :dump
21
+ # @api private
22
+ def json_dump(obj)
23
+ MultiJson.dump(obj)
24
+ end
25
+ else
26
+ # @api private
27
+ def json_dump(obj)
28
+ MultiJson.encode(obj)
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,55 @@
1
+ module Selenium
2
+ module WebDriver
3
+
4
+ #
5
+ # @api private
6
+ # @see ActionBuilder
7
+
8
+ class Keyboard
9
+
10
+ def initialize(bridge)
11
+ @bridge = bridge
12
+ end
13
+
14
+ def send_keys(*keys)
15
+ @bridge.sendKeysToActiveElement Keys.encode(keys)
16
+ end
17
+
18
+ #
19
+ # Press a modifier key
20
+ #
21
+ # @see Selenium::WebDriver::Keys
22
+ #
23
+
24
+ def press(key)
25
+ assert_modifier key
26
+
27
+ @bridge.sendKeysToActiveElement Keys.encode([key])
28
+ end
29
+
30
+ #
31
+ # Release a modifier key
32
+ #
33
+ # @see Selenium::WebDriver::Keys
34
+ #
35
+
36
+ def release(key)
37
+ assert_modifier key
38
+
39
+ @bridge.sendKeysToActiveElement Keys.encode([key])
40
+ end
41
+
42
+ private
43
+
44
+ MODIFIERS = [:control, :shift, :alt, :command, :meta]
45
+
46
+ def assert_modifier(key)
47
+ unless MODIFIERS.include? key
48
+ raise ArgumentError,
49
+ "#{key.inspect} is not a modifier key, expected one of #{MODIFIERS.inspect}"
50
+ end
51
+ end
52
+
53
+ end # Keyboard
54
+ end # WebDriver
55
+ end # Selenium