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,9 @@
1
+ require 'base64'
2
+
3
+ module Base64
4
+
5
+ def self.strict_encode64(str)
6
+ encode64(str).gsub(/\n/, '')
7
+ end unless respond_to?(:strict_encode64) # added in 1.9
8
+
9
+ end
@@ -0,0 +1,42 @@
1
+ class Dir
2
+ # @api private
3
+ def self.mktmpdir(prefix_suffix=nil, tmpdir=nil)
4
+ case prefix_suffix
5
+ when nil
6
+ prefix = "d"
7
+ suffix = ""
8
+ when String
9
+ prefix = prefix_suffix
10
+ suffix = ""
11
+ when Array
12
+ prefix = prefix_suffix[0]
13
+ suffix = prefix_suffix[1]
14
+ else
15
+ raise ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}"
16
+ end
17
+ tmpdir ||= Dir.tmpdir
18
+ t = Time.now.strftime("%Y%m%d")
19
+ n = nil
20
+ begin
21
+ path = "#{tmpdir}/#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
22
+ path << "-#{n}" if n
23
+ path << suffix
24
+ Dir.mkdir(path, 0700)
25
+ rescue Errno::EEXIST
26
+ n ||= 0
27
+ n += 1
28
+ retry
29
+ end
30
+
31
+ if block_given?
32
+ begin
33
+ yield path
34
+ ensure
35
+ FileUtils.remove_entry_secure path
36
+ end
37
+ else
38
+ path
39
+ end
40
+ end unless respond_to? :mktmpdir # > 1.8.7
41
+ end
42
+
@@ -0,0 +1,5 @@
1
+ unless '1.9'.respond_to?(:bytesize)
2
+ class String
3
+ alias :bytesize :size
4
+ end
5
+ end
@@ -0,0 +1,301 @@
1
+ module Selenium
2
+ module WebDriver
3
+
4
+ #
5
+ # The main class through which you control the browser.
6
+ #
7
+ # @see SearchContext
8
+ # @see Navigation
9
+ # @see TargetLocator
10
+ # @see Options
11
+ #
12
+
13
+ class Driver
14
+ include SearchContext
15
+
16
+ class << self
17
+
18
+ #
19
+ # @api private
20
+ #
21
+ # @see Selenium::WebDriver.for
22
+ #
23
+ # @return [Driver]
24
+ #
25
+
26
+ def for(browser, opts = {})
27
+ listener = opts.delete(:listener)
28
+
29
+ bridge = case browser
30
+ when :firefox, :ff
31
+ Firefox::Bridge.new(opts)
32
+ when :remote
33
+ Remote::Bridge.new(opts)
34
+ when :ie, :internet_explorer
35
+ IE::Bridge.new(opts)
36
+ when :chrome
37
+ Chrome::Bridge.new(opts)
38
+ when :android
39
+ Android::Bridge.new(opts)
40
+ when :iphone
41
+ IPhone::Bridge.new(opts)
42
+ when :opera
43
+ Opera::Bridge.new(opts)
44
+ when :phantomjs
45
+ PhantomJS::Bridge.new(opts)
46
+ when :safari
47
+ Safari::Bridge.new(opts)
48
+ else
49
+ raise ArgumentError, "unknown driver: #{browser.inspect}"
50
+ end
51
+
52
+ bridge = Support::EventFiringBridge.new(bridge, listener) if listener
53
+
54
+ new(bridge)
55
+ end
56
+ end
57
+
58
+ #
59
+ # A new Driver instance with the given bridge.
60
+ # End users should use Selenium::WebDriver.for instead of using this directly.
61
+ #
62
+ # @api private
63
+ #
64
+
65
+ def initialize(bridge)
66
+ @bridge = bridge
67
+
68
+ # TODO: refactor this away
69
+ unless bridge.driver_extensions.empty?
70
+ extend(*bridge.driver_extensions)
71
+ end
72
+ end
73
+
74
+ def inspect
75
+ '#<%s:0x%x browser=%s>' % [self.class, hash*2, bridge.browser.inspect]
76
+ end
77
+
78
+ #
79
+ # @return [Navigation]
80
+ # @see Navigation
81
+ #
82
+
83
+ def navigate
84
+ @navigate ||= WebDriver::Navigation.new(bridge)
85
+ end
86
+
87
+ #
88
+ # @return [TargetLocator]
89
+ # @see TargetLocator
90
+ #
91
+
92
+ def switch_to
93
+ @switch_to ||= WebDriver::TargetLocator.new(bridge)
94
+ end
95
+
96
+ #
97
+ # @return [Options]
98
+ # @see Options
99
+ #
100
+
101
+ def manage
102
+ @manage ||= WebDriver::Options.new(bridge)
103
+ end
104
+
105
+ #
106
+ # Opens the specified URL in the browser.
107
+ #
108
+
109
+ def get(url)
110
+ navigate.to(url)
111
+ end
112
+
113
+ #
114
+ # Get the URL of the current page
115
+ #
116
+ # @return [String]
117
+ #
118
+
119
+ def current_url
120
+ bridge.getCurrentUrl
121
+ end
122
+
123
+ #
124
+ # Get the title of the current page
125
+ #
126
+ # @return [String]
127
+ #
128
+
129
+ def title
130
+ bridge.getTitle
131
+ end
132
+
133
+ #
134
+ # Get the source of the current page
135
+ #
136
+ # @return [String]
137
+ #
138
+
139
+ def page_source
140
+ bridge.getPageSource
141
+ end
142
+
143
+ #
144
+ # Get the visibility of the browser. Not applicable for all browsers.
145
+ #
146
+ # @return [Boolean]
147
+ #
148
+
149
+ def visible?
150
+ bridge.getBrowserVisible
151
+ end
152
+
153
+ #
154
+ # Set the visibility of the browser. Not applicable for all browsers.
155
+ #
156
+ # @param [Boolean]
157
+ #
158
+
159
+ def visible=(bool)
160
+ bridge.setBrowserVisible bool
161
+ end
162
+
163
+ #
164
+ # Quit the browser
165
+ #
166
+
167
+ def quit
168
+ bridge.quit
169
+ end
170
+
171
+ #
172
+ # Close the current window, or the browser if no windows are left.
173
+ #
174
+
175
+ def close
176
+ bridge.close
177
+ end
178
+
179
+ #
180
+ # Get the window handles of open browser windows.
181
+ #
182
+ # @return [Array]
183
+ # @see TargetLocator#window
184
+ #
185
+
186
+ def window_handles
187
+ bridge.getWindowHandles
188
+ end
189
+
190
+ #
191
+ # Get the current window handle
192
+ #
193
+ # @return [String]
194
+ #
195
+
196
+ def window_handle
197
+ bridge.getCurrentWindowHandle
198
+ end
199
+
200
+ #
201
+ # Execute the given JavaScript
202
+ #
203
+ # @param [String] script
204
+ # JavaScript source to execute
205
+ # @param [WebDriver::Element,Integer, Float, Boolean, NilClass, String, Array] *args
206
+ # Arguments will be available in the given script in the 'arguments' pseudo-array.
207
+ #
208
+ # @return [WebDriver::Element,Integer,Float,Boolean,NilClass,String,Array]
209
+ # The value returned from the script.
210
+ #
211
+
212
+ def execute_script(script, *args)
213
+ bridge.executeScript(script, *args)
214
+ end
215
+
216
+ # Execute an asynchronous piece of JavaScript in the context of the
217
+ # currently selected frame or window. Unlike executing
218
+ # execute_script (synchronous JavaScript), scripts
219
+ # executed with this method must explicitly signal they are finished by
220
+ # invoking the provided callback. This callback is always injected into the
221
+ # executed function as the last argument.
222
+ #
223
+ # @param [String] script
224
+ # JavaSCript source to execute
225
+ # @param [WebDriver::Element,Integer, Float, Boolean, NilClass, String, Array] *args
226
+ # Arguments to the script. May be empty.
227
+ #
228
+ # @return [WebDriver::Element,Integer,Float,Boolean,NilClass,String,Array]
229
+ #
230
+
231
+ def execute_async_script(script, *args)
232
+ bridge.executeAsyncScript(script, *args)
233
+ end
234
+
235
+
236
+ #-------------------------------- sugar --------------------------------
237
+
238
+ #
239
+ # driver.first(:id, 'foo')
240
+ #
241
+
242
+ alias_method :first, :find_element
243
+
244
+ #
245
+ # driver.all(:class, 'bar') #=> [#<WebDriver::Element:0x1011c3b88, ...]
246
+ #
247
+
248
+ alias_method :all, :find_elements
249
+
250
+ #
251
+ # driver.script('function() { ... };')
252
+ #
253
+
254
+ alias_method :script, :execute_script
255
+
256
+ # Get the first element matching the given selector. If given a
257
+ # String or Symbol, it will be used as the id of the element.
258
+ #
259
+ # @param [String,Hash] id or selector
260
+ # @return [WebDriver::Element]
261
+ #
262
+ # Examples:
263
+ #
264
+ # driver['someElementId'] #=> #<WebDriver::Element:0x1011c3b88>
265
+ # driver[:tag_name => 'div'] #=> #<WebDriver::Element:0x1011c3b88>
266
+ #
267
+
268
+ def [](sel)
269
+ if sel.kind_of?(String) || sel.kind_of?(Symbol)
270
+ sel = { :id => sel }
271
+ end
272
+
273
+ find_element sel
274
+ end
275
+
276
+ def browser
277
+ bridge.browser
278
+ end
279
+
280
+ def capabilities
281
+ bridge.capabilities
282
+ end
283
+
284
+ #
285
+ # @api private
286
+ # @see SearchContext
287
+ #
288
+
289
+ def ref
290
+ nil
291
+ end
292
+
293
+ private
294
+
295
+ def bridge
296
+ @bridge
297
+ end
298
+
299
+ end # Driver
300
+ end # WebDriver
301
+ end # Selenium
@@ -0,0 +1,17 @@
1
+ module Selenium
2
+ module WebDriver
3
+ module DriverExtensions
4
+
5
+ module HasBrowserConnection
6
+ def online?
7
+ @bridge.isBrowserOnline
8
+ end
9
+
10
+ def online=(bool)
11
+ @bridge.setBrowserOnline bool
12
+ end
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,39 @@
1
+ module Selenium
2
+ module WebDriver
3
+
4
+ #
5
+ # @api private
6
+ #
7
+
8
+ module DriverExtensions
9
+ module HasInputDevices
10
+
11
+ #
12
+ # @return [ActionBuilder]
13
+ # @api public
14
+ #
15
+
16
+ def action
17
+ ActionBuilder.new mouse, keyboard
18
+ end
19
+
20
+ #
21
+ # @api private
22
+ #
23
+
24
+ def mouse
25
+ Mouse.new @bridge
26
+ end
27
+
28
+ #
29
+ # @api private
30
+ #
31
+
32
+ def keyboard
33
+ Keyboard.new @bridge
34
+ end
35
+
36
+ end # HasInputDevices
37
+ end # DriverExtensions
38
+ end # WebDriver
39
+ end # Selenium
@@ -0,0 +1,25 @@
1
+ module Selenium
2
+ module WebDriver
3
+ module DriverExtensions
4
+
5
+ module HasLocation
6
+ def location
7
+ @bridge.getLocation
8
+ end
9
+
10
+ def location=(loc)
11
+ unless loc.kind_of?(Location)
12
+ raise TypeError, "expected #{Location}, got #{loc.inspect}:#{loc.class}"
13
+ end
14
+
15
+ @bridge.setLocation loc.latitude, loc.longitude, loc.altitude
16
+ end
17
+
18
+ def set_location(lat, lon, alt)
19
+ self.location = Location.new(Float(lat), Float(lon), Float(alt))
20
+ end
21
+ end
22
+
23
+ end
24
+ end
25
+ end