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.
- data/COPYING +204 -0
- data/chrome/prebuilt/Win32/Release/npchromedriver.dll +0 -0
- data/chrome/prebuilt/x64/Release/npchromedriver.dll +0 -0
- data/chrome/src/extension/background.html +9 -0
- data/chrome/src/extension/background.js +995 -0
- data/chrome/src/extension/content_script.js +1321 -0
- data/chrome/src/extension/icons/busy.png +0 -0
- data/chrome/src/extension/icons/free.png +0 -0
- data/chrome/src/extension/manifest-nonwin.json +19 -0
- data/chrome/src/extension/manifest-win.json +20 -0
- data/chrome/src/extension/utils.js +231 -0
- data/chrome/src/rb/lib/selenium/webdriver/chrome.rb +8 -0
- data/chrome/src/rb/lib/selenium/webdriver/chrome/bridge.rb +358 -0
- data/chrome/src/rb/lib/selenium/webdriver/chrome/command_executor.rb +124 -0
- data/chrome/src/rb/lib/selenium/webdriver/chrome/launcher.rb +135 -0
- data/common/src/js/abstractcommandprocessor.js +134 -0
- data/common/src/js/asserts.js +296 -0
- data/common/src/js/by.js +149 -0
- data/common/src/js/command.js +304 -0
- data/common/src/js/context.js +58 -0
- data/common/src/js/core/Blank.html +7 -0
- data/common/src/js/core/InjectedRemoteRunner.html +8 -0
- data/common/src/js/core/RemoteRunner.html +101 -0
- data/common/src/js/core/SeleniumLog.html +109 -0
- data/common/src/js/core/TestPrompt.html +145 -0
- data/common/src/js/core/TestRunner-splash.html +55 -0
- data/common/src/js/core/TestRunner.html +165 -0
- data/common/src/js/core/icons/all.png +0 -0
- data/common/src/js/core/icons/continue.png +0 -0
- data/common/src/js/core/icons/continue_disabled.png +0 -0
- data/common/src/js/core/icons/pause.png +0 -0
- data/common/src/js/core/icons/pause_disabled.png +0 -0
- data/common/src/js/core/icons/selected.png +0 -0
- data/common/src/js/core/icons/step.png +0 -0
- data/common/src/js/core/icons/step_disabled.png +0 -0
- data/common/src/js/core/lib/cssQuery/cssQuery-p.js +6 -0
- data/common/src/js/core/lib/cssQuery/src/cssQuery-level2.js +142 -0
- data/common/src/js/core/lib/cssQuery/src/cssQuery-level3.js +150 -0
- data/common/src/js/core/lib/cssQuery/src/cssQuery-standard.js +53 -0
- data/common/src/js/core/lib/cssQuery/src/cssQuery.js +356 -0
- data/common/src/js/core/lib/prototype.js +2006 -0
- data/common/src/js/core/lib/scriptaculous/builder.js +101 -0
- data/common/src/js/core/lib/scriptaculous/controls.js +815 -0
- data/common/src/js/core/lib/scriptaculous/dragdrop.js +915 -0
- data/common/src/js/core/lib/scriptaculous/effects.js +958 -0
- data/common/src/js/core/lib/scriptaculous/scriptaculous.js +47 -0
- data/common/src/js/core/lib/scriptaculous/slider.js +283 -0
- data/common/src/js/core/lib/scriptaculous/unittest.js +383 -0
- data/common/src/js/core/lib/snapsie.js +91 -0
- data/common/src/js/core/scripts/find_matching_child.js +69 -0
- data/common/src/js/core/scripts/htmlutils.js +8716 -0
- data/common/src/js/core/scripts/injection.html +72 -0
- data/common/src/js/core/scripts/selenium-api.js +3291 -0
- data/common/src/js/core/scripts/selenium-browserbot.js +2457 -0
- data/common/src/js/core/scripts/selenium-browserdetect.js +153 -0
- data/common/src/js/core/scripts/selenium-commandhandlers.js +379 -0
- data/common/src/js/core/scripts/selenium-executionloop.js +175 -0
- data/common/src/js/core/scripts/selenium-logging.js +148 -0
- data/common/src/js/core/scripts/selenium-remoterunner.js +695 -0
- data/common/src/js/core/scripts/selenium-testrunner.js +1362 -0
- data/common/src/js/core/scripts/selenium-version.js +5 -0
- data/common/src/js/core/scripts/ui-doc.html +808 -0
- data/common/src/js/core/scripts/ui-element.js +1644 -0
- data/common/src/js/core/scripts/ui-map-sample.js +979 -0
- data/common/src/js/core/scripts/user-extensions.js +3 -0
- data/common/src/js/core/scripts/user-extensions.js.sample +75 -0
- data/common/src/js/core/scripts/xmlextras.js +153 -0
- data/common/src/js/core/selenium-logo.png +0 -0
- data/common/src/js/core/selenium-test.css +43 -0
- data/common/src/js/core/selenium.css +316 -0
- data/common/src/js/core/xpath/dom.js +566 -0
- data/common/src/js/core/xpath/javascript-xpath-0.1.11.js +2816 -0
- data/common/src/js/core/xpath/util.js +549 -0
- data/common/src/js/core/xpath/xmltoken.js +149 -0
- data/common/src/js/core/xpath/xpath.js +2481 -0
- data/common/src/js/extension/README +2 -0
- data/common/src/js/extension/dommessenger.js +152 -0
- data/common/src/js/factory.js +55 -0
- data/common/src/js/future.js +141 -0
- data/common/src/js/jsunit.js +40 -0
- data/common/src/js/jsunit/app/css/jsUnitStyle.css +50 -0
- data/common/src/js/jsunit/app/css/readme +10 -0
- data/common/src/js/jsunit/app/emptyPage.html +11 -0
- data/common/src/js/jsunit/app/jsUnitCore.js +534 -0
- data/common/src/js/jsunit/app/jsUnitMockTimeout.js +81 -0
- data/common/src/js/jsunit/app/jsUnitTestManager.js +705 -0
- data/common/src/js/jsunit/app/jsUnitTestSuite.js +44 -0
- data/common/src/js/jsunit/app/jsUnitTracer.js +102 -0
- data/common/src/js/jsunit/app/jsUnitVersionCheck.js +59 -0
- data/common/src/js/jsunit/app/main-counts-errors.html +12 -0
- data/common/src/js/jsunit/app/main-counts-failures.html +13 -0
- data/common/src/js/jsunit/app/main-counts-runs.html +13 -0
- data/common/src/js/jsunit/app/main-counts.html +21 -0
- data/common/src/js/jsunit/app/main-data.html +178 -0
- data/common/src/js/jsunit/app/main-errors.html +23 -0
- data/common/src/js/jsunit/app/main-frame.html +19 -0
- data/common/src/js/jsunit/app/main-loader.html +45 -0
- data/common/src/js/jsunit/app/main-progress.html +25 -0
- data/common/src/js/jsunit/app/main-results.html +67 -0
- data/common/src/js/jsunit/app/main-status.html +13 -0
- data/common/src/js/jsunit/app/testContainer.html +16 -0
- data/common/src/js/jsunit/app/testContainerController.html +77 -0
- data/common/src/js/jsunit/app/xbDebug.js +306 -0
- data/common/src/js/jsunit/changelog.txt +60 -0
- data/common/src/js/jsunit/css/jsUnitStyle.css +83 -0
- data/common/src/js/jsunit/images/green.gif +0 -0
- data/common/src/js/jsunit/images/logo_jsunit.gif +0 -0
- data/common/src/js/jsunit/images/powerby-transparent.gif +0 -0
- data/common/src/js/jsunit/images/red.gif +0 -0
- data/common/src/js/jsunit/licenses/JDOM_license.txt +56 -0
- data/common/src/js/jsunit/licenses/Jetty_license.html +213 -0
- data/common/src/js/jsunit/licenses/MPL-1.1.txt +470 -0
- data/common/src/js/jsunit/licenses/gpl-2.txt +340 -0
- data/common/src/js/jsunit/licenses/index.html +141 -0
- data/common/src/js/jsunit/licenses/lgpl-2.1.txt +504 -0
- data/common/src/js/jsunit/licenses/mpl-tri-license-c.txt +35 -0
- data/common/src/js/jsunit/licenses/mpl-tri-license-html.txt +35 -0
- data/common/src/js/jsunit/readme.txt +19 -0
- data/common/src/js/jsunit/testRunner.html +167 -0
- data/common/src/js/jsunit/version.txt +1 -0
- data/common/src/js/key.js +117 -0
- data/common/src/js/localcommandprocessor.js +185 -0
- data/common/src/js/testcase.js +217 -0
- data/common/src/js/timing.js +89 -0
- data/common/src/js/webdriver.js +890 -0
- data/common/src/js/webelement.js +485 -0
- data/common/src/rb/README +30 -0
- data/common/src/rb/lib/selenium-webdriver.rb +1 -0
- data/common/src/rb/lib/selenium/webdriver.rb +67 -0
- data/common/src/rb/lib/selenium/webdriver/bridge_helper.rb +91 -0
- data/common/src/rb/lib/selenium/webdriver/child_process.rb +180 -0
- data/common/src/rb/lib/selenium/webdriver/core_ext/dir.rb +41 -0
- data/common/src/rb/lib/selenium/webdriver/driver.rb +252 -0
- data/common/src/rb/lib/selenium/webdriver/driver_extensions/takes_screenshot.rb +24 -0
- data/common/src/rb/lib/selenium/webdriver/element.rb +262 -0
- data/common/src/rb/lib/selenium/webdriver/error.rb +67 -0
- data/common/src/rb/lib/selenium/webdriver/find.rb +89 -0
- data/common/src/rb/lib/selenium/webdriver/keys.rb +84 -0
- data/common/src/rb/lib/selenium/webdriver/navigation.rb +27 -0
- data/common/src/rb/lib/selenium/webdriver/options.rb +50 -0
- data/common/src/rb/lib/selenium/webdriver/platform.rb +86 -0
- data/common/src/rb/lib/selenium/webdriver/target_locator.rb +70 -0
- data/firefox/prebuilt/Win32/Release/webdriver-firefox.dll +0 -0
- data/firefox/prebuilt/linux/Release/libwebdriver-firefox.so +0 -0
- data/firefox/prebuilt/linux/Release/x_ignore_nofocus.so +0 -0
- data/firefox/prebuilt/linux64/Release/libwebdriver-firefox.so +0 -0
- data/firefox/prebuilt/linux64/Release/x_ignore_nofocus.so +0 -0
- data/firefox/prebuilt/nsICommandProcessor.xpt +0 -0
- data/firefox/prebuilt/nsINativeEvents.xpt +0 -0
- data/firefox/prebuilt/nsIResponseHandler.xpt +0 -0
- data/firefox/src/extension/chrome.manifest +3 -0
- data/firefox/src/extension/components/badCertListener.js +294 -0
- data/firefox/src/extension/components/context.js +37 -0
- data/firefox/src/extension/components/driver-component.js +127 -0
- data/firefox/src/extension/components/firefoxDriver.js +810 -0
- data/firefox/src/extension/components/json2.js +273 -0
- data/firefox/src/extension/components/keytest.html +554 -0
- data/firefox/src/extension/components/nsCommandProcessor.js +643 -0
- data/firefox/src/extension/components/promptService.js +208 -0
- data/firefox/src/extension/components/screenshooter.js +81 -0
- data/firefox/src/extension/components/socketListener.js +185 -0
- data/firefox/src/extension/components/utils.js +1263 -0
- data/firefox/src/extension/components/webLoadingListener.js +57 -0
- data/firefox/src/extension/components/webdriverserver.js +106 -0
- data/firefox/src/extension/components/wrappedElement.js +683 -0
- data/firefox/src/extension/content/fxdriver.xul +30 -0
- data/firefox/src/extension/content/server.js +95 -0
- data/firefox/src/extension/idl/nsICommandProcessor.idl +38 -0
- data/firefox/src/extension/idl/nsIResponseHandler.idl +34 -0
- data/firefox/src/extension/install.rdf +29 -0
- data/firefox/src/rb/lib/selenium/webdriver/firefox.rb +31 -0
- data/firefox/src/rb/lib/selenium/webdriver/firefox/binary.rb +107 -0
- data/firefox/src/rb/lib/selenium/webdriver/firefox/bridge.rb +484 -0
- data/firefox/src/rb/lib/selenium/webdriver/firefox/extension_connection.rb +90 -0
- data/firefox/src/rb/lib/selenium/webdriver/firefox/launcher.rb +155 -0
- data/firefox/src/rb/lib/selenium/webdriver/firefox/profile.rb +233 -0
- data/firefox/src/rb/lib/selenium/webdriver/firefox/profiles_ini.rb +59 -0
- data/firefox/src/rb/lib/selenium/webdriver/firefox/util.rb +23 -0
- data/jobbie/prebuilt/Win32/Release/InternetExplorerDriver.dll +0 -0
- data/jobbie/prebuilt/x64/Release/InternetExplorerDriver.dll +0 -0
- data/jobbie/src/rb/lib/selenium/webdriver/ie.rb +14 -0
- data/jobbie/src/rb/lib/selenium/webdriver/ie/bridge.rb +565 -0
- data/jobbie/src/rb/lib/selenium/webdriver/ie/lib.rb +99 -0
- data/jobbie/src/rb/lib/selenium/webdriver/ie/util.rb +147 -0
- data/remote/client/src/rb/lib/selenium/webdriver/remote.rb +16 -0
- data/remote/client/src/rb/lib/selenium/webdriver/remote/bridge.rb +408 -0
- data/remote/client/src/rb/lib/selenium/webdriver/remote/capabilities.rb +105 -0
- data/remote/client/src/rb/lib/selenium/webdriver/remote/commands.rb +53 -0
- data/remote/client/src/rb/lib/selenium/webdriver/remote/default_http_client.rb +71 -0
- data/remote/client/src/rb/lib/selenium/webdriver/remote/response.rb +49 -0
- data/remote/client/src/rb/lib/selenium/webdriver/remote/server_error.rb +32 -0
- 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
|