rainux-selenium-webdriver 0.0.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. data/COPYING +204 -0
  2. data/chrome/prebuilt/Win32/Release/npchromedriver.dll +0 -0
  3. data/chrome/prebuilt/x64/Release/npchromedriver.dll +0 -0
  4. data/chrome/src/extension/background.html +9 -0
  5. data/chrome/src/extension/background.js +995 -0
  6. data/chrome/src/extension/content_script.js +1321 -0
  7. data/chrome/src/extension/icons/busy.png +0 -0
  8. data/chrome/src/extension/icons/free.png +0 -0
  9. data/chrome/src/extension/manifest-nonwin.json +19 -0
  10. data/chrome/src/extension/manifest-win.json +20 -0
  11. data/chrome/src/extension/utils.js +231 -0
  12. data/chrome/src/rb/lib/selenium/webdriver/chrome.rb +8 -0
  13. data/chrome/src/rb/lib/selenium/webdriver/chrome/bridge.rb +358 -0
  14. data/chrome/src/rb/lib/selenium/webdriver/chrome/command_executor.rb +124 -0
  15. data/chrome/src/rb/lib/selenium/webdriver/chrome/launcher.rb +135 -0
  16. data/common/src/js/abstractcommandprocessor.js +134 -0
  17. data/common/src/js/asserts.js +296 -0
  18. data/common/src/js/by.js +149 -0
  19. data/common/src/js/command.js +304 -0
  20. data/common/src/js/context.js +58 -0
  21. data/common/src/js/core/Blank.html +7 -0
  22. data/common/src/js/core/InjectedRemoteRunner.html +8 -0
  23. data/common/src/js/core/RemoteRunner.html +101 -0
  24. data/common/src/js/core/SeleniumLog.html +109 -0
  25. data/common/src/js/core/TestPrompt.html +145 -0
  26. data/common/src/js/core/TestRunner-splash.html +55 -0
  27. data/common/src/js/core/TestRunner.html +165 -0
  28. data/common/src/js/core/icons/all.png +0 -0
  29. data/common/src/js/core/icons/continue.png +0 -0
  30. data/common/src/js/core/icons/continue_disabled.png +0 -0
  31. data/common/src/js/core/icons/pause.png +0 -0
  32. data/common/src/js/core/icons/pause_disabled.png +0 -0
  33. data/common/src/js/core/icons/selected.png +0 -0
  34. data/common/src/js/core/icons/step.png +0 -0
  35. data/common/src/js/core/icons/step_disabled.png +0 -0
  36. data/common/src/js/core/lib/cssQuery/cssQuery-p.js +6 -0
  37. data/common/src/js/core/lib/cssQuery/src/cssQuery-level2.js +142 -0
  38. data/common/src/js/core/lib/cssQuery/src/cssQuery-level3.js +150 -0
  39. data/common/src/js/core/lib/cssQuery/src/cssQuery-standard.js +53 -0
  40. data/common/src/js/core/lib/cssQuery/src/cssQuery.js +356 -0
  41. data/common/src/js/core/lib/prototype.js +2006 -0
  42. data/common/src/js/core/lib/scriptaculous/builder.js +101 -0
  43. data/common/src/js/core/lib/scriptaculous/controls.js +815 -0
  44. data/common/src/js/core/lib/scriptaculous/dragdrop.js +915 -0
  45. data/common/src/js/core/lib/scriptaculous/effects.js +958 -0
  46. data/common/src/js/core/lib/scriptaculous/scriptaculous.js +47 -0
  47. data/common/src/js/core/lib/scriptaculous/slider.js +283 -0
  48. data/common/src/js/core/lib/scriptaculous/unittest.js +383 -0
  49. data/common/src/js/core/lib/snapsie.js +91 -0
  50. data/common/src/js/core/scripts/find_matching_child.js +69 -0
  51. data/common/src/js/core/scripts/htmlutils.js +8716 -0
  52. data/common/src/js/core/scripts/injection.html +72 -0
  53. data/common/src/js/core/scripts/selenium-api.js +3291 -0
  54. data/common/src/js/core/scripts/selenium-browserbot.js +2457 -0
  55. data/common/src/js/core/scripts/selenium-browserdetect.js +153 -0
  56. data/common/src/js/core/scripts/selenium-commandhandlers.js +379 -0
  57. data/common/src/js/core/scripts/selenium-executionloop.js +175 -0
  58. data/common/src/js/core/scripts/selenium-logging.js +148 -0
  59. data/common/src/js/core/scripts/selenium-remoterunner.js +695 -0
  60. data/common/src/js/core/scripts/selenium-testrunner.js +1362 -0
  61. data/common/src/js/core/scripts/selenium-version.js +5 -0
  62. data/common/src/js/core/scripts/ui-doc.html +808 -0
  63. data/common/src/js/core/scripts/ui-element.js +1644 -0
  64. data/common/src/js/core/scripts/ui-map-sample.js +979 -0
  65. data/common/src/js/core/scripts/user-extensions.js +3 -0
  66. data/common/src/js/core/scripts/user-extensions.js.sample +75 -0
  67. data/common/src/js/core/scripts/xmlextras.js +153 -0
  68. data/common/src/js/core/selenium-logo.png +0 -0
  69. data/common/src/js/core/selenium-test.css +43 -0
  70. data/common/src/js/core/selenium.css +316 -0
  71. data/common/src/js/core/xpath/dom.js +566 -0
  72. data/common/src/js/core/xpath/javascript-xpath-0.1.11.js +2816 -0
  73. data/common/src/js/core/xpath/util.js +549 -0
  74. data/common/src/js/core/xpath/xmltoken.js +149 -0
  75. data/common/src/js/core/xpath/xpath.js +2481 -0
  76. data/common/src/js/extension/README +2 -0
  77. data/common/src/js/extension/dommessenger.js +152 -0
  78. data/common/src/js/factory.js +55 -0
  79. data/common/src/js/future.js +141 -0
  80. data/common/src/js/jsunit.js +40 -0
  81. data/common/src/js/jsunit/app/css/jsUnitStyle.css +50 -0
  82. data/common/src/js/jsunit/app/css/readme +10 -0
  83. data/common/src/js/jsunit/app/emptyPage.html +11 -0
  84. data/common/src/js/jsunit/app/jsUnitCore.js +534 -0
  85. data/common/src/js/jsunit/app/jsUnitMockTimeout.js +81 -0
  86. data/common/src/js/jsunit/app/jsUnitTestManager.js +705 -0
  87. data/common/src/js/jsunit/app/jsUnitTestSuite.js +44 -0
  88. data/common/src/js/jsunit/app/jsUnitTracer.js +102 -0
  89. data/common/src/js/jsunit/app/jsUnitVersionCheck.js +59 -0
  90. data/common/src/js/jsunit/app/main-counts-errors.html +12 -0
  91. data/common/src/js/jsunit/app/main-counts-failures.html +13 -0
  92. data/common/src/js/jsunit/app/main-counts-runs.html +13 -0
  93. data/common/src/js/jsunit/app/main-counts.html +21 -0
  94. data/common/src/js/jsunit/app/main-data.html +178 -0
  95. data/common/src/js/jsunit/app/main-errors.html +23 -0
  96. data/common/src/js/jsunit/app/main-frame.html +19 -0
  97. data/common/src/js/jsunit/app/main-loader.html +45 -0
  98. data/common/src/js/jsunit/app/main-progress.html +25 -0
  99. data/common/src/js/jsunit/app/main-results.html +67 -0
  100. data/common/src/js/jsunit/app/main-status.html +13 -0
  101. data/common/src/js/jsunit/app/testContainer.html +16 -0
  102. data/common/src/js/jsunit/app/testContainerController.html +77 -0
  103. data/common/src/js/jsunit/app/xbDebug.js +306 -0
  104. data/common/src/js/jsunit/changelog.txt +60 -0
  105. data/common/src/js/jsunit/css/jsUnitStyle.css +83 -0
  106. data/common/src/js/jsunit/images/green.gif +0 -0
  107. data/common/src/js/jsunit/images/logo_jsunit.gif +0 -0
  108. data/common/src/js/jsunit/images/powerby-transparent.gif +0 -0
  109. data/common/src/js/jsunit/images/red.gif +0 -0
  110. data/common/src/js/jsunit/licenses/JDOM_license.txt +56 -0
  111. data/common/src/js/jsunit/licenses/Jetty_license.html +213 -0
  112. data/common/src/js/jsunit/licenses/MPL-1.1.txt +470 -0
  113. data/common/src/js/jsunit/licenses/gpl-2.txt +340 -0
  114. data/common/src/js/jsunit/licenses/index.html +141 -0
  115. data/common/src/js/jsunit/licenses/lgpl-2.1.txt +504 -0
  116. data/common/src/js/jsunit/licenses/mpl-tri-license-c.txt +35 -0
  117. data/common/src/js/jsunit/licenses/mpl-tri-license-html.txt +35 -0
  118. data/common/src/js/jsunit/readme.txt +19 -0
  119. data/common/src/js/jsunit/testRunner.html +167 -0
  120. data/common/src/js/jsunit/version.txt +1 -0
  121. data/common/src/js/key.js +117 -0
  122. data/common/src/js/localcommandprocessor.js +185 -0
  123. data/common/src/js/testcase.js +217 -0
  124. data/common/src/js/timing.js +89 -0
  125. data/common/src/js/webdriver.js +890 -0
  126. data/common/src/js/webelement.js +485 -0
  127. data/common/src/rb/README +30 -0
  128. data/common/src/rb/lib/selenium-webdriver.rb +1 -0
  129. data/common/src/rb/lib/selenium/webdriver.rb +67 -0
  130. data/common/src/rb/lib/selenium/webdriver/bridge_helper.rb +91 -0
  131. data/common/src/rb/lib/selenium/webdriver/child_process.rb +180 -0
  132. data/common/src/rb/lib/selenium/webdriver/core_ext/dir.rb +41 -0
  133. data/common/src/rb/lib/selenium/webdriver/driver.rb +252 -0
  134. data/common/src/rb/lib/selenium/webdriver/driver_extensions/takes_screenshot.rb +24 -0
  135. data/common/src/rb/lib/selenium/webdriver/element.rb +262 -0
  136. data/common/src/rb/lib/selenium/webdriver/error.rb +67 -0
  137. data/common/src/rb/lib/selenium/webdriver/find.rb +89 -0
  138. data/common/src/rb/lib/selenium/webdriver/keys.rb +84 -0
  139. data/common/src/rb/lib/selenium/webdriver/navigation.rb +27 -0
  140. data/common/src/rb/lib/selenium/webdriver/options.rb +50 -0
  141. data/common/src/rb/lib/selenium/webdriver/platform.rb +86 -0
  142. data/common/src/rb/lib/selenium/webdriver/target_locator.rb +70 -0
  143. data/firefox/prebuilt/Win32/Release/webdriver-firefox.dll +0 -0
  144. data/firefox/prebuilt/linux/Release/libwebdriver-firefox.so +0 -0
  145. data/firefox/prebuilt/linux/Release/x_ignore_nofocus.so +0 -0
  146. data/firefox/prebuilt/linux64/Release/libwebdriver-firefox.so +0 -0
  147. data/firefox/prebuilt/linux64/Release/x_ignore_nofocus.so +0 -0
  148. data/firefox/prebuilt/nsICommandProcessor.xpt +0 -0
  149. data/firefox/prebuilt/nsINativeEvents.xpt +0 -0
  150. data/firefox/prebuilt/nsIResponseHandler.xpt +0 -0
  151. data/firefox/src/extension/chrome.manifest +3 -0
  152. data/firefox/src/extension/components/badCertListener.js +294 -0
  153. data/firefox/src/extension/components/context.js +37 -0
  154. data/firefox/src/extension/components/driver-component.js +127 -0
  155. data/firefox/src/extension/components/firefoxDriver.js +810 -0
  156. data/firefox/src/extension/components/json2.js +273 -0
  157. data/firefox/src/extension/components/keytest.html +554 -0
  158. data/firefox/src/extension/components/nsCommandProcessor.js +643 -0
  159. data/firefox/src/extension/components/promptService.js +208 -0
  160. data/firefox/src/extension/components/screenshooter.js +81 -0
  161. data/firefox/src/extension/components/socketListener.js +185 -0
  162. data/firefox/src/extension/components/utils.js +1263 -0
  163. data/firefox/src/extension/components/webLoadingListener.js +57 -0
  164. data/firefox/src/extension/components/webdriverserver.js +106 -0
  165. data/firefox/src/extension/components/wrappedElement.js +683 -0
  166. data/firefox/src/extension/content/fxdriver.xul +30 -0
  167. data/firefox/src/extension/content/server.js +95 -0
  168. data/firefox/src/extension/idl/nsICommandProcessor.idl +38 -0
  169. data/firefox/src/extension/idl/nsIResponseHandler.idl +34 -0
  170. data/firefox/src/extension/install.rdf +29 -0
  171. data/firefox/src/rb/lib/selenium/webdriver/firefox.rb +31 -0
  172. data/firefox/src/rb/lib/selenium/webdriver/firefox/binary.rb +107 -0
  173. data/firefox/src/rb/lib/selenium/webdriver/firefox/bridge.rb +484 -0
  174. data/firefox/src/rb/lib/selenium/webdriver/firefox/extension_connection.rb +90 -0
  175. data/firefox/src/rb/lib/selenium/webdriver/firefox/launcher.rb +155 -0
  176. data/firefox/src/rb/lib/selenium/webdriver/firefox/profile.rb +233 -0
  177. data/firefox/src/rb/lib/selenium/webdriver/firefox/profiles_ini.rb +59 -0
  178. data/firefox/src/rb/lib/selenium/webdriver/firefox/util.rb +23 -0
  179. data/jobbie/prebuilt/Win32/Release/InternetExplorerDriver.dll +0 -0
  180. data/jobbie/prebuilt/x64/Release/InternetExplorerDriver.dll +0 -0
  181. data/jobbie/src/rb/lib/selenium/webdriver/ie.rb +14 -0
  182. data/jobbie/src/rb/lib/selenium/webdriver/ie/bridge.rb +565 -0
  183. data/jobbie/src/rb/lib/selenium/webdriver/ie/lib.rb +99 -0
  184. data/jobbie/src/rb/lib/selenium/webdriver/ie/util.rb +147 -0
  185. data/remote/client/src/rb/lib/selenium/webdriver/remote.rb +16 -0
  186. data/remote/client/src/rb/lib/selenium/webdriver/remote/bridge.rb +408 -0
  187. data/remote/client/src/rb/lib/selenium/webdriver/remote/capabilities.rb +105 -0
  188. data/remote/client/src/rb/lib/selenium/webdriver/remote/commands.rb +53 -0
  189. data/remote/client/src/rb/lib/selenium/webdriver/remote/default_http_client.rb +71 -0
  190. data/remote/client/src/rb/lib/selenium/webdriver/remote/response.rb +49 -0
  191. data/remote/client/src/rb/lib/selenium/webdriver/remote/server_error.rb +32 -0
  192. metadata +303 -0
@@ -0,0 +1,24 @@
1
+ module Selenium
2
+ module WebDriver
3
+ module DriverExtensions
4
+ module TakesScreenshot
5
+
6
+ def save_screenshot(png_path)
7
+ File.open(png_path, 'w') { |f| f << screenshot_as(:png) }
8
+ end
9
+
10
+ def screenshot_as(format)
11
+ case format
12
+ when :base64
13
+ bridge.getScreenshotAsBase64
14
+ when :png
15
+ bridge.getScreenshotAsBase64.unpack("m")[0]
16
+ else
17
+ raise Error::UnsupportedOperationError, "unsupported format: #{format.inspect}"
18
+ end
19
+ end
20
+
21
+ end # TakesScreenshot
22
+ end # DriverExtensions
23
+ end # WebDriver
24
+ end # Selenium
@@ -0,0 +1,262 @@
1
+ module Selenium
2
+ module WebDriver
3
+ class Element
4
+ include Find
5
+
6
+ attr_reader :bridge
7
+
8
+ #
9
+ # Creates a new Element
10
+ #
11
+ # @api private
12
+ #
13
+
14
+ def initialize(bridge, id)
15
+ @bridge, @id = bridge, id
16
+ end
17
+
18
+ def inspect
19
+ '#<%s:0x%x id=%s tag_name=%s>' % [self.class, hash*2, @id.inspect, tag_name.inspect]
20
+ end
21
+
22
+ #
23
+ # Click the element
24
+ #
25
+
26
+ def click
27
+ bridge.clickElement @id
28
+ end
29
+
30
+ #
31
+ # Get the tag name of this element
32
+ #
33
+ # @return [String]
34
+ #
35
+
36
+ def tag_name
37
+ bridge.getElementTagName @id
38
+ end
39
+
40
+ #
41
+ # Get the value of this element
42
+ #
43
+ # @return [String]
44
+ #
45
+
46
+ def value
47
+ bridge.getElementValue @id
48
+ end
49
+
50
+ #
51
+ # Get the value of the given attribute
52
+ #
53
+ # @param [String]
54
+ # attribute name
55
+ # @return [String,nil]
56
+ # attribute value
57
+ #
58
+
59
+ def attribute(name)
60
+ bridge.getElementAttribute @id, name
61
+ end
62
+
63
+ #
64
+ # Get the text content of this element
65
+ #
66
+ # @return [String]
67
+ #
68
+
69
+ def text
70
+ bridge.getElementText @id
71
+ end
72
+
73
+ #
74
+ # Send keystrokes to this element
75
+ #
76
+ # @param [String, Symbol, Array]
77
+ #
78
+ # Examples:
79
+ #
80
+ # element.send_keys "foo" #=> value: 'foo'
81
+ # element.send_keys "tet", :arrow_left, "s" #=> value: 'test'
82
+ # element.send_keys [:control, 'a'], :space #=> value: ' '
83
+ #
84
+ # @see Keys::KEYS
85
+ #
86
+
87
+ def send_keys(*args)
88
+ args.each do |arg|
89
+ case arg
90
+ when Symbol
91
+ arg = Keys[arg]
92
+ when Array
93
+ arg = arg.map { |e| e.kind_of?(Symbol) ? Keys[e] : e }.join
94
+ arg << Keys[:null]
95
+ end
96
+
97
+ bridge.sendKeysToElement(@id, arg.to_s)
98
+ end
99
+ end
100
+ alias_method :send_key, :send_keys
101
+
102
+ #
103
+ # Clear this element
104
+ #
105
+
106
+ def clear
107
+ bridge.clearElement @id
108
+ end
109
+
110
+ #
111
+ # Is the element enabled?
112
+ #
113
+ # @return [Boolean]
114
+ #
115
+
116
+ def enabled?
117
+ bridge.isElementEnabled @id
118
+ end
119
+
120
+ #
121
+ # Is the element selected?
122
+ #
123
+ # @return [Boolean]
124
+ #
125
+
126
+ def selected?
127
+ bridge.isElementSelected @id
128
+ end
129
+
130
+ #
131
+ # Is the element displayed?
132
+ #
133
+ # @return [Boolean]
134
+ #
135
+
136
+ def displayed?
137
+ bridge.isElementDisplayed @id
138
+ end
139
+
140
+ #
141
+ # Select this element
142
+ #
143
+
144
+ def select
145
+ bridge.setElementSelected @id
146
+ end
147
+
148
+ #
149
+ # Submit this element
150
+ #
151
+
152
+ def submit
153
+ bridge.submitElement @id
154
+ end
155
+
156
+ #
157
+ # Toggle this element
158
+ #
159
+
160
+ def toggle
161
+ bridge.toggleElement @id
162
+ end
163
+
164
+ #
165
+ # Get the value of the given CSS property
166
+ #
167
+
168
+ def style(prop)
169
+ bridge.getElementValueOfCssProperty @id, prop
170
+ end
171
+
172
+ #
173
+ # Hover over this element. Not applicable to all browsers.
174
+ #
175
+
176
+ def hover
177
+ bridge.hoverOverElement @id
178
+ end
179
+
180
+ #
181
+ # Get the location of this element.
182
+ #
183
+ # @return [WebDriver::Point]
184
+ #
185
+
186
+ def location
187
+ bridge.getElementLocation @id
188
+ end
189
+
190
+ #
191
+ # Get the size of this element
192
+ #
193
+ # @return [WebDriver::Dimension]
194
+ #
195
+
196
+ def size
197
+ bridge.getElementSize @id
198
+ end
199
+
200
+ #
201
+ # Drag and drop this element
202
+ #
203
+ # @param [Integer] right_by
204
+ # number of pixels to drag right
205
+ # @param [Integer] down_by
206
+ # number of pixels to drag down
207
+ #
208
+
209
+ def drag_and_drop_by(right_by, down_by)
210
+ bridge.dragElement @id, right_by, down_by
211
+ end
212
+
213
+ #
214
+ # Drag and drop this element on the given element
215
+ #
216
+ # @param [WebDriver::Element] other
217
+ #
218
+
219
+ def drag_and_drop_on(other)
220
+ current_location = location()
221
+ destination = other.location
222
+
223
+ right = destination.x - current_location.x
224
+ down = destination.y - current_location.y
225
+
226
+ drag_and_drop_by right, down
227
+ end
228
+
229
+ #-------------------------------- sugar --------------------------------
230
+
231
+ #
232
+ # element.first(:id, 'foo')
233
+ #
234
+
235
+ alias_method :first, :find_element
236
+
237
+ #
238
+ # element.all(:class, 'bar')
239
+ #
240
+
241
+ alias_method :all, :find_elements
242
+
243
+ #
244
+ # element['class'] or element[:class] #=> "someclass"
245
+ #
246
+ alias_method :[], :attribute
247
+
248
+ #
249
+ # for Find and execute_script
250
+ #
251
+ # @api private
252
+ #
253
+
254
+ def ref
255
+ @id
256
+ end
257
+
258
+
259
+
260
+ end # Element
261
+ end # WebDriver
262
+ end # Selenium
@@ -0,0 +1,67 @@
1
+ module Selenium
2
+ module WebDriver
3
+ module Error
4
+
5
+ class WebDriverError < StandardError; end
6
+ class IndexOutOfBoundsError < WebDriverError; end # 1
7
+ class NoCollectionError < WebDriverError; end # 2
8
+ class NoStringError < WebDriverError; end # 3
9
+ class NoStringLengthError < WebDriverError; end # 4
10
+ class NoStringWrapperError < WebDriverError; end # 5
11
+ class NoSuchDriverError < WebDriverError; end # 6
12
+ class NoSuchElementError < WebDriverError; end # 7
13
+ class NoSuchFrameError < WebDriverError; end # 8
14
+ # NotImplementedError # 9 - just use Ruby's
15
+ class ObsoleteElementError < WebDriverError; end # 10
16
+ class ElementNotDisplayedError < WebDriverError; end # 11
17
+ class ElementNotEnabledError < WebDriverError; end # 12
18
+ class UnhandledError < WebDriverError; end # 13
19
+ class ExpectedError < WebDriverError; end # 14
20
+ class ElementNotSelectedError < WebDriverError; end # 15
21
+ class NoSuchDocumentError < WebDriverError; end # 16
22
+ class UnexpectedJavascriptError < WebDriverError; end # 17
23
+ class NoScriptResultError < WebDriverError; end # 18
24
+ class UnknownScriptResultError < WebDriverError; end # 19
25
+ class NoSuchCollectionError < WebDriverError; end # 20
26
+ class TimeOutError < WebDriverError; end # 21
27
+ class NullPointerError < WebDriverError; end # 22
28
+ class NoSuchWindowError < WebDriverError; end # 23
29
+ class UnsupportedOperationError < WebDriverError; end
30
+
31
+ Errors = [
32
+ IndexOutOfBoundsError,
33
+ NoCollectionError,
34
+ NoStringError,
35
+ NoStringLengthError,
36
+ NoStringWrapperError,
37
+ NoSuchDriverError,
38
+ NoSuchElementError,
39
+ NoSuchFrameError,
40
+ NotImplementedError,
41
+ ObsoleteElementError,
42
+ ElementNotDisplayedError,
43
+ ElementNotEnabledError,
44
+ UnhandledError,
45
+ ExpectedError,
46
+ ElementNotSelectedError,
47
+ NoSuchDocumentError,
48
+ UnexpectedJavascriptError,
49
+ NoScriptResultError,
50
+ UnknownScriptResultError,
51
+ NoSuchCollectionError,
52
+ TimeOutError,
53
+ NullPointerError,
54
+ NoSuchWindowError
55
+ ]
56
+
57
+ class << self
58
+ def for_code(code)
59
+ return if code == 0
60
+
61
+ Errors[code - 1] || WebDriverError
62
+ end
63
+ end
64
+
65
+ end # Error
66
+ end # WebDriver
67
+ end # Selenium
@@ -0,0 +1,89 @@
1
+ module Selenium
2
+ module WebDriver
3
+ module Find
4
+
5
+ FINDERS = {
6
+ :class => 'ClassName',
7
+ :class_name => 'ClassName',
8
+ :css => 'CssSelector',
9
+ :id => 'Id',
10
+ :link => 'LinkText',
11
+ :link_text => 'LinkText',
12
+ :name => 'Name',
13
+ :partial_link_text => 'PartialLinkText',
14
+ :tag_name => 'TagName',
15
+ :xpath => 'Xpath',
16
+ :js_expr => 'JsExpr',
17
+ :javascript => 'Javascript',
18
+ }
19
+
20
+ #
21
+ # Find the first element matching the given arguments.
22
+ #
23
+ # @param [:class, :class_name, :id, :link_text, :link, :partial_link_text, :name, :tag_name, :xpath] how
24
+ # @param [String] what
25
+ # @return [WebDriver::Element]
26
+ #
27
+ # @raise [NoSuchElementError] if the element doesn't exist
28
+ #
29
+
30
+ def find_element(*args)
31
+ how, what = extract_args(args)
32
+
33
+ unless by = FINDERS[how.to_sym]
34
+ raise ArgumentError, "cannot find element by #{how.inspect}"
35
+ end
36
+
37
+ meth = "findElementBy#{by}"
38
+ what = what.to_s
39
+
40
+ bridge.send meth, ref, what
41
+ end
42
+
43
+ #
44
+ # Find all elements matching the given arguments
45
+ #
46
+ # @param [:class, :class_name, :id, :link_text, :link, :partial_link_text, :name, :tag_name, :xpath] how
47
+ # @param [String] what
48
+ # @return [Array<WebDriver::Element>]
49
+ #
50
+
51
+ def find_elements(*args)
52
+ how, what = extract_args(args)
53
+
54
+ unless by = FINDERS[how.to_sym]
55
+ raise ArgumentError, "cannot find elements by #{how.inspect}"
56
+ end
57
+
58
+ meth = "findElementsBy#{by}"
59
+ what = what.to_s
60
+
61
+ bridge.send meth, ref, what
62
+ end
63
+
64
+ private
65
+
66
+ def extract_args(args)
67
+ case args.size
68
+ when 2
69
+ args
70
+ when 1
71
+ arg = args.first
72
+ unless arg.respond_to?(:shift)
73
+ raise ArgumentError, "expected #{arg.inspect}:#{arg.class} to respond to #shift"
74
+ end
75
+
76
+ arr = arg.shift
77
+ unless arr.size == 2
78
+ raise ArgumentError, "expected #{arr.inspect} to have 2 elements"
79
+ end
80
+
81
+ arr
82
+ else
83
+ raise ArgumentError, "wrong number of arguments (#{args.size} for 2)"
84
+ end
85
+ end
86
+
87
+ end # Find
88
+ end # WebDriver
89
+ end # Selenium
@@ -0,0 +1,84 @@
1
+ # encoding: utf-8
2
+
3
+ module Selenium
4
+ module WebDriver
5
+ module Keys
6
+
7
+ #
8
+ # @see Element#send_keys
9
+ #
10
+ # http://www.google.com.au/search?&q=unicode+pua&btnG=Search
11
+ #
12
+
13
+ KEYS = {
14
+ # \x works on both 1.8.6/1.9
15
+ :null => "\xEE\x80\x80",
16
+ :cancel => "\xEE\x80\x81",
17
+ :help => "\xEE\x80\x82",
18
+ :backspace => "\xEE\x80\x83",
19
+ :tab => "\xEE\x80\x84",
20
+ :clear => "\xEE\x80\x85",
21
+ :return => "\xEE\x80\x86",
22
+ :enter => "\xEE\x80\x87",
23
+ :shift => "\xEE\x80\x88",
24
+ :left_shift => "\xEE\x80\x88",
25
+ :control => "\xEE\x80\x89",
26
+ :left_control => "\xEE\x80\x89",
27
+ :alt => "\xEE\x80\x8A",
28
+ :left_alt => "\xEE\x80\x8A",
29
+ :pause => "\xEE\x80\x8B",
30
+ :escape => "\xEE\x80\x8C",
31
+ :space => "\xEE\x80\x8D",
32
+ :page_up => "\xEE\x80\x8E",
33
+ :page_down => "\xEE\x80\x8F",
34
+ :end => "\xEE\x80\x90",
35
+ :home => "\xEE\x80\x91",
36
+ :left => "\xEE\x80\x92",
37
+ :arrow_left => "\xEE\x80\x92",
38
+ :up => "\xEE\x80\x93",
39
+ :arrow_up => "\xEE\x80\x93",
40
+ :right => "\xEE\x80\x94",
41
+ :arrow_right => "\xEE\x80\x94",
42
+ :down => "\xEE\x80\x95",
43
+ :arrow_down => "\xEE\x80\x95",
44
+ :insert => "\xEE\x80\x96",
45
+ :delete => "\xEE\x80\x97",
46
+ :semicolon => "\xEE\x80\x98",
47
+ :equals => "\xEE\x80\x99",
48
+ :numpad0 => "\xEE\x80\x9A",
49
+ :numpad1 => "\xEE\x80\x9B",
50
+ :numpad2 => "\xEE\x80\x9C",
51
+ :numpad3 => "\xEE\x80\x9D",
52
+ :numpad4 => "\xEE\x80\x9E",
53
+ :numpad5 => "\xEE\x80\x9F",
54
+ :numpad6 => "\xEE\x80\xA0",
55
+ :numpad7 => "\xEE\x80\xA1",
56
+ :numpad8 => "\xEE\x80\xA2",
57
+ :numpad9 => "\xEE\x80\xA3",
58
+ :multiply => "\xEE\x80\xA4",
59
+ :add => "\xEE\x80\xA5",
60
+ :separator => "\xEE\x80\xA6",
61
+ :subtract => "\xEE\x80\xA7",
62
+ :decimal => "\xEE\x80\xA8",
63
+ :divide => "\xEE\x80\xA9",
64
+ :f1 => "\xEE\x80\xB1",
65
+ :f2 => "\xEE\x80\xB2",
66
+ :f3 => "\xEE\x80\xB3",
67
+ :f4 => "\xEE\x80\xB4",
68
+ :f5 => "\xEE\x80\xB5",
69
+ :f6 => "\xEE\x80\xB6",
70
+ :f7 => "\xEE\x80\xB7",
71
+ :f8 => "\xEE\x80\xB8",
72
+ :f9 => "\xEE\x80\xB9",
73
+ :f10 => "\xEE\x80\xBA",
74
+ :f11 => "\xEE\x80\xBB",
75
+ :f12 => "\xEE\x80\xBC"
76
+ }
77
+
78
+ def self.[](key)
79
+ KEYS[key] || raise(Error::UnsupportedOperationError, "no such key #{key.inspect}")
80
+ end
81
+
82
+ end # Keys
83
+ end # WebDriver
84
+ end # Selenium