rainux-selenium-webdriver 0.0.17

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 (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