selenium-webdriver 0.2.2 → 2.0.0
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/CHANGES +11 -1
- data/lib/selenium/webdriver.rb +3 -1
- data/lib/selenium/webdriver/chrome/bridge.rb +7 -5
- data/lib/selenium/webdriver/chrome/service.rb +1 -1
- data/lib/selenium/webdriver/common/driver.rb +2 -0
- data/lib/selenium/webdriver/common/element.rb +0 -72
- data/lib/selenium/webdriver/common/platform.rb +6 -2
- data/lib/selenium/webdriver/firefox/binary.rb +4 -2
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/lib/selenium/webdriver/ie/native/win32/IEDriver.dll +0 -0
- data/lib/selenium/webdriver/ie/native/x64/IEDriver.dll +0 -0
- data/lib/selenium/webdriver/opera.rb +12 -0
- data/lib/selenium/webdriver/opera/bridge.rb +54 -0
- data/lib/selenium/webdriver/opera/service.rb +48 -0
- data/lib/selenium/webdriver/remote/bridge.rb +0 -4
- data/lib/selenium/webdriver/remote/capabilities.rb +5 -3
- data/lib/selenium/webdriver/remote/commands.rb +0 -1
- data/lib/selenium/webdriver/remote/http/common.rb +0 -6
- metadata +5 -2
data/CHANGES
CHANGED
@@ -1,4 +1,14 @@
|
|
1
|
-
0.
|
1
|
+
2.0.0 (2011-07-08)
|
2
|
+
==================
|
3
|
+
|
4
|
+
* Remove deprecated methods Element#{toggle,select,drag_and_drop_*,value}.
|
5
|
+
* Add ability to pass :verbose, :native_events to the Chrome driver.
|
6
|
+
* Synthetic mouse implementation for Firefox - improves drag and drop support platforms without native events.
|
7
|
+
* Added Selenium::WebDriver::Opera (requires the remote server).
|
8
|
+
* Fix for locating Firefox on 64-bit Windows when missing from the registry.
|
9
|
+
* Fix native events on Firefox 4, 5.
|
10
|
+
|
11
|
+
0.2.2 (2011-06-22)
|
2
12
|
==================
|
3
13
|
|
4
14
|
* Deprecate Element#{toggle,select,drag_and_drop_*}
|
data/lib/selenium/webdriver.rb
CHANGED
@@ -39,6 +39,7 @@ module Selenium
|
|
39
39
|
autoload :IPhone, 'selenium/webdriver/iphone'
|
40
40
|
autoload :Remote, 'selenium/webdriver/remote'
|
41
41
|
autoload :Firefox, 'selenium/webdriver/firefox'
|
42
|
+
autoload :Opera, 'selenium/webdriver/opera'
|
42
43
|
|
43
44
|
# @api private
|
44
45
|
|
@@ -49,7 +50,7 @@ module Selenium
|
|
49
50
|
#
|
50
51
|
# Create a new Driver instance with the correct bridge for the given browser
|
51
52
|
#
|
52
|
-
# @param browser [:ie, :internet_explorer, :remote, :chrome, :firefox, :ff, :android, :iphone]
|
53
|
+
# @param browser [:ie, :internet_explorer, :remote, :chrome, :firefox, :ff, :android, :iphone, :opera]
|
53
54
|
# the driver type to use
|
54
55
|
# @param *rest
|
55
56
|
# arguments passed to Bridge.new
|
@@ -62,6 +63,7 @@ module Selenium
|
|
62
63
|
# @see Selenium::WebDriver::Chrome::Bridge
|
63
64
|
# @see Selenium::WebDriver::Android::Bridge
|
64
65
|
# @see Selenium::WebDriver::IPhone::Bridge
|
66
|
+
# @see Selenium::WebDriver::Opera::Bridge
|
65
67
|
#
|
66
68
|
# @example
|
67
69
|
#
|
@@ -6,8 +6,10 @@ module Selenium
|
|
6
6
|
class Bridge < Remote::Bridge
|
7
7
|
|
8
8
|
def initialize(opts = {})
|
9
|
-
http_client
|
10
|
-
switches
|
9
|
+
http_client = opts.delete(:http_client)
|
10
|
+
switches = opts.delete(:switches)
|
11
|
+
native_events = opts.delete(:native_events)
|
12
|
+
verbose = opts.delete(:verbose)
|
11
13
|
|
12
14
|
unless opts.empty?
|
13
15
|
raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
|
@@ -23,9 +25,9 @@ module Selenium
|
|
23
25
|
caps.merge! 'chrome.switches' => switches.map { |e| e.to_s }
|
24
26
|
end
|
25
27
|
|
26
|
-
if Chrome.path
|
27
|
-
|
28
|
-
|
28
|
+
caps.merge! 'chrome.binary' => Chrome.path if Chrome.path
|
29
|
+
caps.merge! 'chrome.nativeEvents' => true if native_events
|
30
|
+
caps.merge! 'chrome.verbose' => true if verbose
|
29
31
|
|
30
32
|
@service = Service.default_service
|
31
33
|
@service.start
|
@@ -9,7 +9,7 @@ module Selenium
|
|
9
9
|
class Service
|
10
10
|
START_TIMEOUT = 20
|
11
11
|
STOP_TIMEOUT = 5
|
12
|
-
MISSING_TEXT = "Unable to find the chromedriver executable. Please download the server from http://code.google.com/p/
|
12
|
+
MISSING_TEXT = "Unable to find the chromedriver executable. Please download the server from http://code.google.com/p/chromium/downloads/list and place it somewhere on your PATH. More info at http://code.google.com/p/selenium/wiki/ChromeDriver."
|
13
13
|
|
14
14
|
attr_reader :uri
|
15
15
|
|
@@ -46,17 +46,6 @@ module Selenium
|
|
46
46
|
bridge.getElementTagName @id
|
47
47
|
end
|
48
48
|
|
49
|
-
#
|
50
|
-
# Get the value of this element
|
51
|
-
#
|
52
|
-
# @return [String]
|
53
|
-
#
|
54
|
-
|
55
|
-
def value
|
56
|
-
warn "#{self.class}#value is deprecated, please use #{self.class}#attribute('value')"
|
57
|
-
bridge.getElementValue @id
|
58
|
-
end
|
59
|
-
|
60
49
|
#
|
61
50
|
# Get the value of a the given attribute of the element. Will return the current value, even if
|
62
51
|
# this has been modified after the page has been loaded. More exactly, this method will return
|
@@ -168,28 +157,6 @@ module Selenium
|
|
168
157
|
bridge.isElementDisplayed @id
|
169
158
|
end
|
170
159
|
|
171
|
-
#
|
172
|
-
# Select this element
|
173
|
-
#
|
174
|
-
|
175
|
-
def select
|
176
|
-
warn "#{self.class}#select is deprecated. Please use #{self.class}#click and determine the current state with #{self.class}#selected?"
|
177
|
-
|
178
|
-
unless displayed?
|
179
|
-
raise Error::ElementNotDisplayedError, "you may not select an element that is not displayed"
|
180
|
-
end
|
181
|
-
|
182
|
-
unless enabled?
|
183
|
-
raise Error::InvalidElementStateError, "cannot select a disabled element"
|
184
|
-
end
|
185
|
-
|
186
|
-
unless selectable?
|
187
|
-
raise Error::InvalidElementStateError, "you may only select options, radios or checkboxes"
|
188
|
-
end
|
189
|
-
|
190
|
-
click unless selected?
|
191
|
-
end
|
192
|
-
|
193
160
|
#
|
194
161
|
# Submit this element
|
195
162
|
#
|
@@ -198,15 +165,6 @@ module Selenium
|
|
198
165
|
bridge.submitElement @id
|
199
166
|
end
|
200
167
|
|
201
|
-
#
|
202
|
-
# Toggle this element
|
203
|
-
#
|
204
|
-
|
205
|
-
def toggle
|
206
|
-
warn "#{self.class}#toggle is deprecated. Please use #{self.class}#click and determine the current state with #{self.class}#selected?"
|
207
|
-
bridge.toggleElement @id
|
208
|
-
end
|
209
|
-
|
210
168
|
#
|
211
169
|
# Get the value of the given CSS property
|
212
170
|
#
|
@@ -245,36 +203,6 @@ module Selenium
|
|
245
203
|
bridge.getElementSize @id
|
246
204
|
end
|
247
205
|
|
248
|
-
#
|
249
|
-
# Drag and drop this element
|
250
|
-
#
|
251
|
-
# @param [Integer] right_by
|
252
|
-
# number of pixels to drag right
|
253
|
-
# @param [Integer] down_by
|
254
|
-
# number of pixels to drag down
|
255
|
-
#
|
256
|
-
|
257
|
-
def drag_and_drop_by(right_by, down_by)
|
258
|
-
warn "#{self.class}#drag_and_drop_{by,on} is deprecated. Please use Selenium::WebDriver::Driver#action (and Selenium::WebDriver::ActionBuilder) instead."
|
259
|
-
bridge.dragElement @id, right_by, down_by
|
260
|
-
end
|
261
|
-
|
262
|
-
#
|
263
|
-
# Drag and drop this element on the given element
|
264
|
-
#
|
265
|
-
# @param [WebDriver::Element] other
|
266
|
-
#
|
267
|
-
|
268
|
-
def drag_and_drop_on(other)
|
269
|
-
current_location = location()
|
270
|
-
destination = other.location
|
271
|
-
|
272
|
-
right = destination.x - current_location.x
|
273
|
-
down = destination.y - current_location.y
|
274
|
-
|
275
|
-
drag_and_drop_by right, down
|
276
|
-
end
|
277
|
-
|
278
206
|
#-------------------------------- sugar --------------------------------
|
279
207
|
|
280
208
|
#
|
@@ -103,10 +103,14 @@ module Selenium
|
|
103
103
|
File.chmod 0766, file
|
104
104
|
end
|
105
105
|
|
106
|
-
def
|
106
|
+
def assert_file(path)
|
107
107
|
unless File.file? path
|
108
108
|
raise Error::WebDriverError, "not a file: #{path.inspect}"
|
109
109
|
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def assert_executable(path)
|
113
|
+
assert_file(path)
|
110
114
|
|
111
115
|
unless File.executable? path
|
112
116
|
raise Error::WebDriverError, "not executable: #{path.inspect}"
|
@@ -131,7 +135,7 @@ module Selenium
|
|
131
135
|
info = Socket.getaddrinfo "localhost", 80, Socket::AF_INET, Socket::SOCK_STREAM
|
132
136
|
|
133
137
|
if info.empty?
|
134
|
-
raise Error::WebDriverError, "unable to translate 'localhost' for TCP+
|
138
|
+
raise Error::WebDriverError, "unable to translate 'localhost' for TCP + IPv4"
|
135
139
|
end
|
136
140
|
|
137
141
|
info[0][3]
|
@@ -148,8 +148,10 @@ module Selenium
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def likely_windows_path
|
151
|
-
|
152
|
-
|
151
|
+
[
|
152
|
+
"#{ ENV['PROGRAMFILES'] || "\\Program Files" }\\Mozilla Firefox\\firefox.exe",
|
153
|
+
"#{ ENV['ProgramFiles(x86)'] || "\\Program Files (x86)" }\\Mozilla Firefox\\firefox.exe"
|
154
|
+
].find { |path| File.executable?(path) }
|
153
155
|
end
|
154
156
|
end # class << self
|
155
157
|
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Selenium
|
2
|
+
module WebDriver
|
3
|
+
module Opera
|
4
|
+
|
5
|
+
#
|
6
|
+
# @api private
|
7
|
+
#
|
8
|
+
|
9
|
+
class Bridge < Remote::Bridge
|
10
|
+
|
11
|
+
def initialize(opts = {})
|
12
|
+
http_client = opts.delete(:http_client)
|
13
|
+
|
14
|
+
unless opts.empty?
|
15
|
+
raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
|
16
|
+
end
|
17
|
+
|
18
|
+
caps = Remote::Capabilities.opera
|
19
|
+
|
20
|
+
@service = Service.default_service
|
21
|
+
@service.start
|
22
|
+
|
23
|
+
remote_opts = {
|
24
|
+
:url => @service.uri,
|
25
|
+
:desired_capabilities => caps
|
26
|
+
}
|
27
|
+
|
28
|
+
remote_opts.merge!(:http_client => http_client) if http_client
|
29
|
+
|
30
|
+
super(remote_opts)
|
31
|
+
end
|
32
|
+
|
33
|
+
def browser
|
34
|
+
:opera
|
35
|
+
end
|
36
|
+
|
37
|
+
def driver_extensions
|
38
|
+
[DriverExtensions::TakesScreenshot]
|
39
|
+
end
|
40
|
+
|
41
|
+
def capabilities
|
42
|
+
@capabilities ||= Remote::Capabilities.opera
|
43
|
+
end
|
44
|
+
|
45
|
+
def quit
|
46
|
+
super
|
47
|
+
ensure
|
48
|
+
@service.stop
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Selenium
|
2
|
+
module WebDriver
|
3
|
+
module Opera
|
4
|
+
|
5
|
+
#
|
6
|
+
# @api private
|
7
|
+
#
|
8
|
+
|
9
|
+
class Service
|
10
|
+
MISSING_TEXT = 'Unable to find the Selenium server jar. Please download the standalone server from http://code.google.com/p/selenium/downloads/list and set the SELENIUM_SERVER_JAR environmental variable to its location. More info at http://code.google.com/p/selenium/wiki/OperaDriver.'
|
11
|
+
|
12
|
+
def self.selenium_server_jar
|
13
|
+
@selenium_server_jar ||= (
|
14
|
+
ENV['SELENIUM_SERVER_JAR'] or raise Error::WebDriverError, MISSING_TEXT
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.selenium_server_jar=(path)
|
19
|
+
Platform.assert_file path
|
20
|
+
@selenium_server_jar = path
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.default_service
|
24
|
+
new selenium_server_jar
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize(jar, opts = {})
|
28
|
+
opts.merge! :background => true, :port => PortProber.random, :log => !!$DEBUG
|
29
|
+
@server = Selenium::Server.new File.expand_path(jar), opts
|
30
|
+
end
|
31
|
+
|
32
|
+
def uri
|
33
|
+
@server.webdriver_url
|
34
|
+
end
|
35
|
+
|
36
|
+
def start
|
37
|
+
@server.start
|
38
|
+
at_exit { stop } # make sure we don't leave the server running
|
39
|
+
end
|
40
|
+
|
41
|
+
def stop
|
42
|
+
@server.stop
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -390,10 +390,6 @@ module Selenium
|
|
390
390
|
execute :submitElement, :id => element
|
391
391
|
end
|
392
392
|
|
393
|
-
def toggleElement(element)
|
394
|
-
execute :toggleElement, :id => element
|
395
|
-
end
|
396
|
-
|
397
393
|
def setElementSelected(element)
|
398
394
|
execute :setElementSelected, :id => element
|
399
395
|
end
|
@@ -93,8 +93,10 @@ module Selenium
|
|
93
93
|
|
94
94
|
def opera(opts = {})
|
95
95
|
new({
|
96
|
-
:browser_name
|
97
|
-
:javascript_enabled
|
96
|
+
:browser_name => "opera",
|
97
|
+
:javascript_enabled => true,
|
98
|
+
:takes_screenshot => true,
|
99
|
+
:css_selectors_enabled => true,
|
98
100
|
}.merge(opts))
|
99
101
|
end
|
100
102
|
|
@@ -228,4 +230,4 @@ module Selenium
|
|
228
230
|
end # Capabilities
|
229
231
|
end # Remote
|
230
232
|
end # WebDriver
|
231
|
-
end # Selenium
|
233
|
+
end # Selenium
|
@@ -46,7 +46,6 @@ class Selenium::WebDriver::Remote::Bridge
|
|
46
46
|
command :clearElement, :post, "session/:session_id/element/:id/clear"
|
47
47
|
command :isElementSelected, :get, "session/:session_id/element/:id/selected"
|
48
48
|
command :setElementSelected, :post, "session/:session_id/element/:id/selected"
|
49
|
-
command :toggleElement, :post, "session/:session_id/element/:id/toggle"
|
50
49
|
command :isElementEnabled, :get, "session/:session_id/element/:id/enabled"
|
51
50
|
command :getElementAttribute, :get, "session/:session_id/element/:id/attribute/:name"
|
52
51
|
command :elementEquals, :get, "session/:session_id/element/:id/equals/:other"
|
@@ -7,12 +7,6 @@ module Selenium
|
|
7
7
|
CONTENT_TYPE = "application/json"
|
8
8
|
DEFAULT_HEADERS = { "Accept" => CONTENT_TYPE }
|
9
9
|
|
10
|
-
# deprecated.
|
11
|
-
def self.timeout=(timeout)
|
12
|
-
raise Error::WebDriverError,
|
13
|
-
"Configuration of HTTP timeouts has changed. See http://code.google.com/p/selenium/wiki/RubyBindings for updated intructions."
|
14
|
-
end
|
15
|
-
|
16
10
|
attr_accessor :timeout
|
17
11
|
attr_writer :server_url
|
18
12
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: selenium-webdriver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 2.0.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jari Bakken
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-07-08 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -122,6 +122,7 @@ files:
|
|
122
122
|
- lib/selenium/webdriver/firefox.rb
|
123
123
|
- lib/selenium/webdriver/ie.rb
|
124
124
|
- lib/selenium/webdriver/iphone.rb
|
125
|
+
- lib/selenium/webdriver/opera.rb
|
125
126
|
- lib/selenium/webdriver/remote.rb
|
126
127
|
- lib/selenium/webdriver/android/bridge.rb
|
127
128
|
- lib/selenium/webdriver/chrome/bridge.rb
|
@@ -168,6 +169,8 @@ files:
|
|
168
169
|
- lib/selenium/webdriver/ie/native/win32/IEDriver.dll
|
169
170
|
- lib/selenium/webdriver/ie/native/x64/IEDriver.dll
|
170
171
|
- lib/selenium/webdriver/iphone/bridge.rb
|
172
|
+
- lib/selenium/webdriver/opera/bridge.rb
|
173
|
+
- lib/selenium/webdriver/opera/service.rb
|
171
174
|
- lib/selenium/webdriver/remote/bridge.rb
|
172
175
|
- lib/selenium/webdriver/remote/capabilities.rb
|
173
176
|
- lib/selenium/webdriver/remote/commands.rb
|