selenium-webdriver 2.15.0 → 2.16.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,26 @@
1
+ 2.16.0 (2012-01-04)
2
+ ===================
3
+
4
+ * Firefox:
5
+ * Native events support for Firefox 9
6
+ * Allow apps to use offline storage by default
7
+ * Fix excessive unwrapping when executing mouseMove
8
+ * Click in the middle, rather than the top-left of elements (#3034, #2700)
9
+ * IE:
10
+ * Raise StaleElementReferenceError when interacting with elements outside the currently focused frame
11
+ * Handle frames and iframes in showModalDialog windows
12
+ * Chrome:
13
+ * Improve client handling of invalid error responses
14
+ * iPhone:
15
+ * Updated to latest CocoaHTTPServer
16
+ * Remote:
17
+ * Improve performance of Element#== by only making an RPC when necessary.
18
+ * Disallow caching of GET requests
19
+ * Various:
20
+ * Raise ArgumentError instead of UnsupportedOperationError on invalid modifier key
21
+ * Improve docs for Server, ActionBuilder and Window
22
+ * Update to latest Sizzle (used for :css selectors in older browsers)
23
+
1
24
  2.15.0 (2011-12-08)
2
25
  ===================
3
26
 
data/README CHANGED
@@ -15,7 +15,7 @@ gem install selenium-webdriver
15
15
 
16
16
  = LICENSE
17
17
 
18
- Copyright 2009-2011 WebDriver committers
18
+ Copyright 2009-2012 Software Freedom Conservancy
19
19
 
20
20
  Licensed under the Apache License, Version 2.0 (the "License");
21
21
  you may not use this file except in compliance with the License.
@@ -1,5 +1,5 @@
1
1
 
2
- # Copyright 2011 Software Freedom Conservatory
2
+ # Copyright 2011 Software Freedom Conservancy
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -22,6 +22,17 @@ module Selenium
22
22
  # server = Selenium::Server.get :latest
23
23
  # server.start
24
24
  #
25
+ # Run the server in the background:
26
+ #
27
+ # server = Selenium::Server.new(jar, :background => true)
28
+ # server.start
29
+ #
30
+ # Add additional arguments:
31
+ #
32
+ # server = Selenium::Server.new(jar)
33
+ # server << ["--additional", "args"]
34
+ # server.start
35
+ #
25
36
 
26
37
  class Server
27
38
  class Error < StandardError; end
@@ -90,6 +101,18 @@ module Selenium
90
101
  end
91
102
  end
92
103
 
104
+ #
105
+ # @param [String] jar Path to the server jar.
106
+ # @param [Hash] opts the options to create the server process with
107
+ #
108
+ # @option opts [Integer] :port Port the server should listen on (default: 4444).
109
+ # @option opts [Integer] :timeout Seconds to wait for server launch/shutdown (default: 30)
110
+ # @option opts [true,false] :background Run the server in the background (default: false)
111
+ # @option opts [true,false,String] :log Either a path to a log file,
112
+ # or true to pass server log to stdout.
113
+ # @raise [Errno::ENOENT] if the jar file does not exist
114
+ #
115
+
93
116
  def initialize(jar, opts = {})
94
117
  raise Errno::ENOENT, jar unless File.exist?(jar)
95
118
 
@@ -107,13 +130,7 @@ module Selenium
107
130
  process.start
108
131
  poll_for_service
109
132
 
110
- unless @background
111
- begin
112
- sleep 1 while process.alive?
113
- rescue Errno::ECHILD
114
- # no longer alive
115
- end
116
- end
133
+ process.wait unless @background
117
134
  end
118
135
 
119
136
  def stop
@@ -46,7 +46,7 @@ module Selenium
46
46
  private
47
47
 
48
48
  def create_capabilities(opts)
49
- switches = opts.delete(:switches)
49
+ args = opts.delete(:args) || opts.delete(:switches)
50
50
  native_events = opts.delete(:native_events)
51
51
  verbose = opts.delete(:verbose)
52
52
  profile = opts.delete(:profile)
@@ -56,28 +56,37 @@ module Selenium
56
56
  raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
57
57
  end
58
58
 
59
- caps = Remote::Capabilities.chrome
59
+ chrome_options = {}
60
60
 
61
- if switches
62
- unless switches.kind_of? Array
63
- raise ArgumentError, ":switches must be an Array of Strings"
61
+ if args
62
+ unless args.kind_of? Array
63
+ raise ArgumentError, ":args must be an Array of Strings"
64
64
  end
65
65
 
66
- caps.merge! 'chrome.switches' => switches.map { |e| e.to_s }
66
+ chrome_options['args'] = args.map { |e| e.to_s }
67
67
  end
68
68
 
69
69
  if profile
70
70
  data = profile.as_json
71
71
 
72
- caps.merge! 'chrome.profile' => data['zip'],
73
- 'chrome.extensions' => data['extensions']
72
+ chrome_options.merge! 'profile' => data['zip'],
73
+ 'extensions' => data['extensions']
74
74
  end
75
75
 
76
76
 
77
- caps.merge! 'chrome.binary' => Chrome.path if Chrome.path
78
- caps.merge! 'chrome.nativeEvents' => true if native_events
79
- caps.merge! 'chrome.verbose' => true if verbose
80
- caps.merge! 'chrome.detach' => detach.nil? || !!detach
77
+ chrome_options['binary'] = Chrome.path if Chrome.path
78
+ chrome_options['nativeEvents'] = true if native_events
79
+ chrome_options['verbose'] = true if verbose
80
+ chrome_options['detach'] = detach.nil? || !!detach
81
+
82
+ caps = Remote::Capabilities.chrome
83
+ caps['chromeOptions'] = chrome_options
84
+
85
+ # legacy options - for chromedriver < 17.0.963.0
86
+ caps["chrome.switches"] = chrome_options['args'] if chrome_options.member?('args')
87
+ %w[binary detach extensions nativeEvents profile verbose].each do |key|
88
+ caps["chrome.#{key}"] = chrome_options[key] if chrome_options.member?(key)
89
+ end
81
90
 
82
91
  caps
83
92
  end
@@ -9,7 +9,7 @@ module Selenium
9
9
  # Selenium::WebDriver::DriverExtensions::HasInputDevices#action, which
10
10
  # is available on Driver instances that support the user interaction API.
11
11
  #
12
- # Example:
12
+ # @example
13
13
  #
14
14
  # driver.action.key_down(:shift).
15
15
  # click(element).
@@ -34,6 +34,32 @@ module Selenium
34
34
  @actions = []
35
35
  end
36
36
 
37
+ #
38
+ # Performs a modifier key press. Does not release
39
+ # the modifier key - subsequent interactions may assume it's kept pressed.
40
+ # Note that the modifier key is never released implicitly - either
41
+ # #key_up(key) or #send_keys(:null) must be called to release the modifier.
42
+ #
43
+ # Equivalent to:
44
+ # driver.action.click(element).send_keys(key)
45
+ # # or
46
+ # driver.action.click.send_keys(key)
47
+ #
48
+ # @example Press a key
49
+ #
50
+ # driver.action.key_down(:control).perform
51
+ #
52
+ # @example Press a key on an element
53
+ #
54
+ # el = driver.find_element(:id, "some_id")
55
+ # driver.action.key_down(el, :shift).perform
56
+ #
57
+ # @param [:shift, :alt, :control, :command, :meta] The key to press.
58
+ # @param [Selenium::WebDriver::Element] element An optional element
59
+ # @raise [ArgumentError] if the given key is not a modifier
60
+ # @return [ActionBuilder] A self reference.
61
+ #
62
+
37
63
  def key_down(*args)
38
64
  if args.first.kind_of? Element
39
65
  @actions << [:mouse, :click, [args.shift]]
@@ -43,6 +69,25 @@ module Selenium
43
69
  self
44
70
  end
45
71
 
72
+ #
73
+ # Performs a modifier key release.
74
+ # Releasing a non-depressed modifier key will yield undefined behaviour.
75
+ #
76
+ # @example Release a key
77
+ #
78
+ # driver.action.key_up(:shift).perform
79
+ #
80
+ # @example Release a key from an element
81
+ #
82
+ # el = driver.find_element(:id, "some_id")
83
+ # driver.action.key_up(el, :alt).perform
84
+ #
85
+ # @param [:shift, :alt, :control, :command, :meta] The modifier key to release.
86
+ # @param [Selenium::WebDriver::Element] element An optional element
87
+ # @raise [ArgumentError] if the given key is not a modifier key
88
+ # @return [ActionBuilder] A self reference.
89
+ #
90
+
46
91
  def key_up(*args)
47
92
  if args.first.kind_of? Element
48
93
  @actions << [:mouse, :click, [args.shift]]
@@ -52,6 +97,27 @@ module Selenium
52
97
  self
53
98
  end
54
99
 
100
+ #
101
+ # Sends keys to the active element. This differs from calling
102
+ # Element#send_keys(keys) on the active element in two ways:
103
+ #
104
+ # * The modifier keys included in this call are not released.
105
+ # * There is no attempt to re-focus the element - so send_keys(:tab) for switching elements should work.
106
+ #
107
+ # @example Send the text "help" to an element
108
+ #
109
+ # el = driver.find_element(:id, "some_id")
110
+ # driver.action.send_keys(el, "help").perform
111
+ #
112
+ # @example Send the text "help" to the currently focused element
113
+ #
114
+ # driver.action.send_keys("help").perform
115
+ #
116
+ # @param [Selenium::WebDriver::Element] element An optional element
117
+ # @param [String] keys The keys to be sent.
118
+ # @return [ActionBuilder] A self reference.
119
+ #
120
+
55
121
  def send_keys(*args)
56
122
  if args.first.kind_of? Element
57
123
  @actions << [:mouse, :click, [args.shift]]
@@ -61,26 +127,111 @@ module Selenium
61
127
  self
62
128
  end
63
129
 
130
+ #
131
+ # Clicks (without releasing) in the middle of the given element. This is
132
+ # equivalent to:
133
+ #
134
+ # driver.action.move_to(element).click_and_hold
135
+ #
136
+ # @example Clicking and holding on some element
137
+ #
138
+ # el = driver.find_element(:id, "some_id")
139
+ # driver.action.click_and_hold(el).perform
140
+ #
141
+ # @param [Selenium::WebDriver::Element] element the element to move to and click.
142
+ # @return [ActionBuilder] A self reference.
143
+ #
144
+
64
145
  def click_and_hold(element)
65
146
  @actions << [:mouse, :down, [element]]
66
147
  self
67
148
  end
68
149
 
150
+ #
151
+ # Releases the depressed left mouse button at the current mouse location.
152
+ #
153
+ # @example Releasing an element after clicking and holding it
154
+ #
155
+ # el = driver.find_element(:id, "some_id")
156
+ # driver.action.click_and_hold(el).release.perform
157
+ #
158
+ # @return [ActionBuilder] A self reference.
159
+ #
160
+
69
161
  def release(element = nil)
70
162
  @actions << [:mouse, :up, [element]]
71
163
  self
72
164
  end
73
165
 
166
+ #
167
+ # Clicks in the middle of the given element. Equivalent to:
168
+ #
169
+ # driver.action.move_to(element).click
170
+ #
171
+ # When no element is passed, the current mouse position will be clicked.
172
+ #
173
+ # @example Clicking on an element
174
+ #
175
+ # el = driver.find_element(:id, "some_id")
176
+ # driver.action.click(el).perform
177
+ #
178
+ # @example Clicking at the current mouse position
179
+ #
180
+ # driver.action.click.perform
181
+ #
182
+ # @param [Selenium::WebDriver::Element] element An optional element to click.
183
+ # @return [ActionBuilder] A self reference.
184
+ #
185
+
74
186
  def click(element = nil)
75
187
  @actions << [:mouse, :click, [element]]
76
188
  self
77
189
  end
78
190
 
191
+ #
192
+ # Performs a double-click at middle of the given element. Equivalent to:
193
+ #
194
+ # driver.action.move_to(element).double_click
195
+ #
196
+ # @example Double click an element
197
+ #
198
+ # el = driver.find_element(:id, "some_id")
199
+ # driver.action.double_click(el).perform
200
+ #
201
+ # @param [Selenium::WebDriver::Element] element An optional element to move to.
202
+ # @return [ActionBuilder] A self reference.
203
+ #
204
+
79
205
  def double_click(element = nil)
80
206
  @actions << [:mouse, :double_click, [element]]
81
207
  self
82
208
  end
83
209
 
210
+ #
211
+ # Moves the mouse to the middle of the given element. The element is scrolled into
212
+ # view and its location is calculated using getBoundingClientRect. Then the
213
+ # mouse is moved to optional offset coordinates from the element.
214
+ #
215
+ # Note that when using offsets, both coordinates need to be passed.
216
+ #
217
+ # @example Scroll element into view and move the mouse to it
218
+ #
219
+ # el = driver.find_element(:id, "some_id")
220
+ # driver.action.move_to(el).perform
221
+ #
222
+ # @example
223
+ #
224
+ # el = driver.find_element(:id, "some_id")
225
+ # driver.action.move_to(el, 100, 100).perform
226
+ #
227
+ # @param [Selenium::WebDriver::Element] element to move to.
228
+ # @param [Integer] right_by Optional offset from the top-left corner. A negative value means
229
+ # coordinates right from the element.
230
+ # @param [Integer] down_by Optional offset from the top-left corner. A negative value means
231
+ # coordinates above the element.
232
+ # @return [ActionBuilder] A self reference.
233
+ #
234
+
84
235
  def move_to(element, right_by = nil, down_by = nil)
85
236
  if right_by && down_by
86
237
  @actions << [:mouse, :move_to, [element, right_by, down_by]]
@@ -91,16 +242,65 @@ module Selenium
91
242
  self
92
243
  end
93
244
 
245
+ #
246
+ # Moves the mouse from its current position (or 0,0) by the given offset.
247
+ # If the coordinates provided are outside the viewport (the mouse will
248
+ # end up outside the browser window) then the viewport is scrolled to
249
+ # match.
250
+ #
251
+ # @example Move the mouse to a certain offset from its current position
252
+ #
253
+ # driver.action.move_by(100, 100).perform
254
+ #
255
+ # @param [Integer] right_by horizontal offset. A negative value means moving the
256
+ # mouse left.
257
+ # @param [Integer] down_by vertical offset. A negative value means moving the mouse
258
+ # up.
259
+ # @return [ActionBuilder] A self reference.
260
+ # @raise [MoveTargetOutOfBoundsError] if the provided offset is outside
261
+ # the document's boundaries.
262
+ #
263
+
94
264
  def move_by(right_by, down_by)
95
265
  @actions << [:mouse, :move_by, [right_by, down_by]]
96
266
  self
97
267
  end
98
268
 
99
- def context_click(element = nil)
269
+ #
270
+ # Performs a context-click at middle of the given element. First performs
271
+ # a move_to to the location of the element.
272
+ #
273
+ # @example Context-click at middle of given element
274
+ #
275
+ # el = driver.find_element(:id, "some_id")
276
+ # driver.action.context_click(el).perform
277
+ #
278
+ # @param [Selenium::WebDriver::Element] element An element to context click.
279
+ # @return [ActionBuilder] A self reference.
280
+ #
281
+
282
+ def context_click(element)
100
283
  @actions << [:mouse, :context_click, [element]]
101
284
  self
102
285
  end
103
286
 
287
+ #
288
+ # A convenience method that performs click-and-hold at the location of the
289
+ # source element, moves to the location of the target element, then
290
+ # releases the mouse.
291
+ #
292
+ # @example Drag and drop one element onto another
293
+ #
294
+ # el1 = driver.find_element(:id, "some_id1")
295
+ # el2 = driver.find_element(:id, "some_id2")
296
+ # driver.action.drag_and_drop(el1, el2).perform
297
+ #
298
+ # @param [Selenium::WebDriver::Element] source element to emulate button down at.
299
+ # @param [Selenium::WebDriver::Element] target element to move to and release the
300
+ # mouse at.
301
+ # @return [ActionBuilder] A self reference.
302
+ #
303
+
104
304
  def drag_and_drop(source, target)
105
305
  click_and_hold source
106
306
  move_to target
@@ -109,6 +309,23 @@ module Selenium
109
309
  self
110
310
  end
111
311
 
312
+ #
313
+ # A convenience method that performs click-and-hold at the location of
314
+ # the source element, moves by a given offset, then releases the mouse.
315
+ #
316
+ # @example Drag and drop an element by offset
317
+ #
318
+ # el = driver.find_element(:id, "some_id1")
319
+ # driver.action.drag_and_drop_by(el, 100, 100).perform
320
+ #
321
+ # @param [Selenium::WebDriver::Element] source Element to emulate button down at.
322
+ # @param [Integer] right_by horizontal move offset.
323
+ # @param [Integer] down_by vertical move offset.
324
+ # @param [Selenium::WebDriver::Element] target Element to move to and release the
325
+ # mouse at.
326
+ # @return [ActionBuilder] A self reference.
327
+ #
328
+
112
329
  def drag_and_drop_by(source, right_by, down_by)
113
330
  click_and_hold source
114
331
  move_by right_by, down_by
@@ -117,10 +334,17 @@ module Selenium
117
334
  self
118
335
  end
119
336
 
337
+
338
+ #
339
+ # Executes the actions added to the builder.
340
+ #
341
+
120
342
  def perform
121
343
  @actions.each { |receiver, method, args|
122
344
  @devices.fetch(receiver).__send__(method, *args)
123
345
  }
346
+
347
+ nil
124
348
  end
125
349
 
126
350
  end # ActionBuilder
@@ -152,6 +152,13 @@ module Selenium
152
152
  #
153
153
  # Get the value of the given CSS property
154
154
  #
155
+ # Note that shorthand CSS properties (e.g. background, font, border, border-top, margin,
156
+ # margin-top, padding, padding-top, list-style, outline, pause, cue) are not returned,
157
+ # in accordance with the DOM CSS2 specification - you should directly access the longhand
158
+ # properties (e.g. background-color) to access the desired values.
159
+ #
160
+ # @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration
161
+ #
155
162
 
156
163
  def style(prop)
157
164
  bridge.getElementValueOfCssProperty @id, prop
@@ -13,7 +13,7 @@ module Selenium
13
13
  end
14
14
 
15
15
  #
16
- # Release a modifier key
16
+ # Press a modifier key
17
17
  #
18
18
  # @see Selenium::WebDriver::Keys
19
19
  #
@@ -42,7 +42,7 @@ module Selenium
42
42
 
43
43
  def assert_modifier(key)
44
44
  unless MODIFIERS.include? key
45
- raise Error::UnsupportedOperationError,
45
+ raise ArgumentError,
46
46
  "#{key.inspect} is not a modifier key, expected one of #{MODIFIERS.inspect}"
47
47
  end
48
48
  end
@@ -1,16 +1,26 @@
1
1
  module Selenium
2
2
  module WebDriver
3
-
3
+
4
4
  #
5
5
  # @api beta This API may be changed or removed in a future release.
6
- #
7
-
6
+ #
7
+
8
8
  class Window
9
9
 
10
+ #
11
+ # @api private
12
+ #
13
+
10
14
  def initialize(bridge)
11
15
  @bridge = bridge
12
16
  end
13
17
 
18
+ #
19
+ # Resize the current window to the given dimension.
20
+ #
21
+ # @param [Selenium::WebDriver::Dimension, #width and #height] dimension The new size.
22
+ #
23
+
14
24
  def size=(dimension)
15
25
  unless dimension.respond_to?(:width) && dimension.respond_to?(:height)
16
26
  raise ArgumentError, "expected #{dimension.inspect}:#{dimension.class}" +
@@ -20,10 +30,22 @@ module Selenium
20
30
  @bridge.setWindowSize dimension.width, dimension.height
21
31
  end
22
32
 
33
+ #
34
+ # Get the size of the current window.
35
+ #
36
+ # @return [Selenium::WebDriver::Dimension] The size.
37
+ #
38
+
23
39
  def size
24
40
  @bridge.getWindowSize
25
41
  end
26
42
 
43
+ #
44
+ # Move the current window to the given position.
45
+ #
46
+ # @param [Selenium::WebDriver::Point, #x and #y] point The new position.
47
+ #
48
+
27
49
  def position=(point)
28
50
  unless point.respond_to?(:x) && point.respond_to?(:y)
29
51
  raise ArgumentError, "expected #{point.inspect}:#{point.class}" +
@@ -33,12 +55,23 @@ module Selenium
33
55
  @bridge.setWindowPosition point.x, point.y
34
56
  end
35
57
 
58
+ #
59
+ # Get the position of the current window.
60
+ #
61
+ # @return [Selenium::WebDriver::Point] The position.
62
+ #
63
+
36
64
  def position
37
65
  @bridge.getWindowPosition
38
66
  end
39
67
 
40
68
  #
41
- # equivalent to #size=, but accepts width and height arguments
69
+ # Equivalent to #size=, but accepts width and height arguments.
70
+ #
71
+ # @example Maximize the window.
72
+ #
73
+ # max_width, max_height = driver.execute_script("return [window.screen.availWidth, window.screen.availHeight];")
74
+ # driver.manage.window.resize_to(max_width, max_height)
42
75
  #
43
76
 
44
77
  def resize_to(width, height)
@@ -46,7 +79,11 @@ module Selenium
46
79
  end
47
80
 
48
81
  #
49
- # equivalent to #position=, but accepts x and y arguments
82
+ # Equivalent to #position=, but accepts x and y arguments.
83
+ #
84
+ # @example
85
+ #
86
+ # driver.manage.window.move_to(300, 400)
50
87
  #
51
88
 
52
89
  def move_to(x, y)
@@ -56,4 +93,4 @@ module Selenium
56
93
 
57
94
  end
58
95
  end
59
- end
96
+ end
@@ -287,6 +287,7 @@ module Selenium
287
287
  "network.manage-offline-status" => 'false',
288
288
  "network.http.phishy-userpass-length" => '255',
289
289
  "network.http.max-connections-per-server" => '10',
290
+ "offline-apps.allow_by_default" => 'true',
290
291
  "prompts.tab_modal.enabled" => "false",
291
292
  "security.warn_entering_secure" => 'false',
292
293
  "security.warn_submit_insecure" => 'false',
@@ -386,7 +386,11 @@ module Selenium
386
386
  end
387
387
 
388
388
  def elementEquals(element, other)
389
- execute :elementEquals, :id => element.ref, :other => other.ref
389
+ if element.ref == other.ref
390
+ true
391
+ else
392
+ execute :elementEquals, :id => element.ref, :other => other.ref
393
+ end
390
394
  end
391
395
 
392
396
  def find_element_by(how, what, parent = nil)
@@ -21,6 +21,7 @@ module Selenium
21
21
  def call(verb, url, command_hash)
22
22
  url = server_url.merge(url) unless url.kind_of?(URI)
23
23
  headers = DEFAULT_HEADERS.dup
24
+ headers['Cache-Control'] = "no-cache" if verb == :get
24
25
 
25
26
  if command_hash
26
27
  payload = MultiJson.encode(command_hash)
@@ -16,7 +16,7 @@ module Selenium
16
16
  end
17
17
 
18
18
  def error
19
- klass = Error.for_code(@payload['status']) || return
19
+ klass = Error.for_code(status) || return
20
20
 
21
21
  ex = klass.new(error_message)
22
22
  ex.set_backtrace(caller)
@@ -26,7 +26,7 @@ module Selenium
26
26
  end
27
27
 
28
28
  def error_message
29
- val = @payload['value']
29
+ val = value
30
30
 
31
31
  case val
32
32
  when Hash
@@ -34,6 +34,8 @@ module Selenium
34
34
  msg << " (#{ val['class'] })" if val['class']
35
35
  when String
36
36
  msg = val
37
+ else
38
+ msg = "unknown error, status=#{status}: #{val.inspect}"
37
39
  end
38
40
 
39
41
  msg
@@ -56,7 +58,11 @@ module Selenium
56
58
  end
57
59
 
58
60
  def add_backtrace(ex)
59
- return unless server_trace = @payload['value']['stackTrace']
61
+ unless value.kind_of?(Hash) && value['stackTrace']
62
+ return
63
+ end
64
+
65
+ server_trace = value['stackTrace']
60
66
 
61
67
  backtrace = server_trace.map do |frame|
62
68
  next unless frame.kind_of?(Hash)
@@ -79,6 +85,14 @@ module Selenium
79
85
  ex.set_backtrace(backtrace + ex.backtrace)
80
86
  end
81
87
 
88
+ def status
89
+ @payload['status']
90
+ end
91
+
92
+ def value
93
+ @payload['value']
94
+ end
95
+
82
96
  end # Response
83
97
  end # Remote
84
98
  end # WebDriver
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: selenium-webdriver
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 2.15.0
5
+ version: 2.16.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-12-08 00:00:00 +01:00
13
+ date: 2012-01-05 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -43,7 +43,7 @@ dependencies:
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 0.2.1
46
+ version: 0.2.5
47
47
  type: :runtime
48
48
  version_requirements: *id003
49
49
  - !ruby/object:Gem::Dependency
@@ -115,92 +115,92 @@ files:
115
115
  - lib/selenium/client.rb
116
116
  - lib/selenium/server.rb
117
117
  - lib/selenium/webdriver.rb
118
- - lib/selenium/client/base.rb
119
118
  - lib/selenium/client/driver.rb
120
- - lib/selenium/client/errors.rb
121
119
  - lib/selenium/client/extensions.rb
122
- - lib/selenium/client/idiomatic.rb
123
120
  - lib/selenium/client/javascript_expression_builder.rb
121
+ - lib/selenium/client/base.rb
122
+ - lib/selenium/client/selenium_helper.rb
124
123
  - lib/selenium/client/legacy_driver.rb
124
+ - lib/selenium/client/errors.rb
125
125
  - lib/selenium/client/protocol.rb
126
- - lib/selenium/client/selenium_helper.rb
127
- - lib/selenium/client/javascript_frameworks/jquery.rb
126
+ - lib/selenium/client/idiomatic.rb
128
127
  - lib/selenium/client/javascript_frameworks/prototype.rb
128
+ - lib/selenium/client/javascript_frameworks/jquery.rb
129
129
  - lib/selenium/rake/server_task.rb
130
- - lib/selenium/webdriver/android.rb
131
130
  - lib/selenium/webdriver/chrome.rb
132
- - lib/selenium/webdriver/common.rb
131
+ - lib/selenium/webdriver/iphone.rb
132
+ - lib/selenium/webdriver/remote.rb
133
133
  - lib/selenium/webdriver/firefox.rb
134
+ - lib/selenium/webdriver/common.rb
134
135
  - lib/selenium/webdriver/ie.rb
135
- - lib/selenium/webdriver/iphone.rb
136
136
  - lib/selenium/webdriver/opera.rb
137
- - lib/selenium/webdriver/remote.rb
138
137
  - lib/selenium/webdriver/support.rb
138
+ - lib/selenium/webdriver/android.rb
139
139
  - lib/selenium/webdriver/android/bridge.rb
140
+ - lib/selenium/webdriver/iphone/bridge.rb
141
+ - lib/selenium/webdriver/support/event_firing_bridge.rb
142
+ - lib/selenium/webdriver/support/abstract_event_listener.rb
143
+ - lib/selenium/webdriver/support/block_event_listener.rb
144
+ - lib/selenium/webdriver/support/select.rb
140
145
  - lib/selenium/webdriver/chrome/bridge.rb
141
146
  - lib/selenium/webdriver/chrome/profile.rb
142
147
  - lib/selenium/webdriver/chrome/service.rb
143
- - lib/selenium/webdriver/common/action_builder.rb
148
+ - lib/selenium/webdriver/opera/bridge.rb
149
+ - lib/selenium/webdriver/opera/service.rb
150
+ - lib/selenium/webdriver/remote/bridge.rb
151
+ - lib/selenium/webdriver/remote/commands.rb
152
+ - lib/selenium/webdriver/remote/server_error.rb
153
+ - lib/selenium/webdriver/remote/capabilities.rb
154
+ - lib/selenium/webdriver/remote/response.rb
155
+ - lib/selenium/webdriver/remote/http/persistent.rb
156
+ - lib/selenium/webdriver/remote/http/curb.rb
157
+ - lib/selenium/webdriver/remote/http/default.rb
158
+ - lib/selenium/webdriver/remote/http/common.rb
159
+ - lib/selenium/webdriver/firefox/bridge.rb
160
+ - lib/selenium/webdriver/firefox/profile.rb
161
+ - lib/selenium/webdriver/firefox/socket_lock.rb
162
+ - lib/selenium/webdriver/firefox/util.rb
163
+ - lib/selenium/webdriver/firefox/binary.rb
164
+ - lib/selenium/webdriver/firefox/extension.rb
165
+ - lib/selenium/webdriver/firefox/profiles_ini.rb
166
+ - lib/selenium/webdriver/firefox/launcher.rb
167
+ - lib/selenium/webdriver/firefox/extension/webdriver.xpi
168
+ - lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so
169
+ - lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so
170
+ - lib/selenium/webdriver/common/platform.rb
144
171
  - lib/selenium/webdriver/common/alert.rb
145
- - lib/selenium/webdriver/common/bridge_helper.rb
146
- - lib/selenium/webdriver/common/driver.rb
147
- - lib/selenium/webdriver/common/element.rb
148
- - lib/selenium/webdriver/common/error.rb
149
- - lib/selenium/webdriver/common/file_reaper.rb
150
- - lib/selenium/webdriver/common/keyboard.rb
151
172
  - lib/selenium/webdriver/common/keys.rb
173
+ - lib/selenium/webdriver/common/action_builder.rb
174
+ - lib/selenium/webdriver/common/driver.rb
152
175
  - lib/selenium/webdriver/common/mouse.rb
176
+ - lib/selenium/webdriver/common/socket_poller.rb
177
+ - lib/selenium/webdriver/common/element.rb
178
+ - lib/selenium/webdriver/common/window.rb
179
+ - lib/selenium/webdriver/common/wait.rb
153
180
  - lib/selenium/webdriver/common/navigation.rb
154
- - lib/selenium/webdriver/common/options.rb
155
- - lib/selenium/webdriver/common/platform.rb
181
+ - lib/selenium/webdriver/common/file_reaper.rb
182
+ - lib/selenium/webdriver/common/bridge_helper.rb
156
183
  - lib/selenium/webdriver/common/port_prober.rb
157
- - lib/selenium/webdriver/common/profile_helper.rb
158
- - lib/selenium/webdriver/common/proxy.rb
159
184
  - lib/selenium/webdriver/common/search_context.rb
160
- - lib/selenium/webdriver/common/socket_poller.rb
161
185
  - lib/selenium/webdriver/common/target_locator.rb
186
+ - lib/selenium/webdriver/common/keyboard.rb
162
187
  - lib/selenium/webdriver/common/timeouts.rb
163
- - lib/selenium/webdriver/common/wait.rb
164
- - lib/selenium/webdriver/common/window.rb
188
+ - lib/selenium/webdriver/common/error.rb
189
+ - lib/selenium/webdriver/common/profile_helper.rb
190
+ - lib/selenium/webdriver/common/options.rb
165
191
  - lib/selenium/webdriver/common/zipper.rb
192
+ - lib/selenium/webdriver/common/proxy.rb
166
193
  - lib/selenium/webdriver/common/core_ext/base64.rb
167
194
  - lib/selenium/webdriver/common/core_ext/dir.rb
168
195
  - lib/selenium/webdriver/common/core_ext/string.rb
196
+ - lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb
169
197
  - lib/selenium/webdriver/common/driver_extensions/has_input_devices.rb
170
198
  - lib/selenium/webdriver/common/driver_extensions/rotatable.rb
171
- - lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb
172
199
  - lib/selenium/webdriver/common/driver_extensions/uploads_files.rb
173
- - lib/selenium/webdriver/firefox/binary.rb
174
- - lib/selenium/webdriver/firefox/bridge.rb
175
- - lib/selenium/webdriver/firefox/extension.rb
176
- - lib/selenium/webdriver/firefox/launcher.rb
177
- - lib/selenium/webdriver/firefox/profile.rb
178
- - lib/selenium/webdriver/firefox/profiles_ini.rb
179
- - lib/selenium/webdriver/firefox/socket_lock.rb
180
- - lib/selenium/webdriver/firefox/util.rb
181
- - lib/selenium/webdriver/firefox/extension/webdriver.xpi
182
- - lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so
183
- - lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so
184
200
  - lib/selenium/webdriver/ie/bridge.rb
185
201
  - lib/selenium/webdriver/ie/server.rb
186
- - lib/selenium/webdriver/ie/native/win32/IEDriver.dll
187
202
  - lib/selenium/webdriver/ie/native/x64/IEDriver.dll
188
- - lib/selenium/webdriver/iphone/bridge.rb
189
- - lib/selenium/webdriver/opera/bridge.rb
190
- - lib/selenium/webdriver/opera/service.rb
191
- - lib/selenium/webdriver/remote/bridge.rb
192
- - lib/selenium/webdriver/remote/capabilities.rb
193
- - lib/selenium/webdriver/remote/commands.rb
194
- - lib/selenium/webdriver/remote/response.rb
195
- - lib/selenium/webdriver/remote/server_error.rb
196
- - lib/selenium/webdriver/remote/http/common.rb
197
- - lib/selenium/webdriver/remote/http/curb.rb
198
- - lib/selenium/webdriver/remote/http/default.rb
199
- - lib/selenium/webdriver/remote/http/persistent.rb
200
- - lib/selenium/webdriver/support/abstract_event_listener.rb
201
- - lib/selenium/webdriver/support/block_event_listener.rb
202
- - lib/selenium/webdriver/support/event_firing_bridge.rb
203
- - lib/selenium/webdriver/support/select.rb
203
+ - lib/selenium/webdriver/ie/native/win32/IEDriver.dll
204
204
  - CHANGES
205
205
  - README
206
206
  has_rdoc: true