selenium-webdriver 2.53.4 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +363 -10
  3. data/LICENSE +1 -1
  4. data/README.md +2 -3
  5. data/lib/selenium-webdriver.rb +0 -2
  6. data/lib/selenium/server.rb +69 -70
  7. data/lib/selenium/webdriver.rb +32 -23
  8. data/lib/selenium/webdriver/atoms.rb +18 -0
  9. data/lib/selenium/webdriver/atoms/getAttribute.js +8 -0
  10. data/lib/selenium/webdriver/chrome.rb +8 -6
  11. data/lib/selenium/webdriver/chrome/driver.rb +112 -0
  12. data/lib/selenium/webdriver/chrome/options.rb +168 -0
  13. data/lib/selenium/webdriver/chrome/profile.rb +17 -17
  14. data/lib/selenium/webdriver/chrome/service.rb +22 -89
  15. data/lib/selenium/webdriver/common.rb +13 -6
  16. data/lib/selenium/webdriver/common/action_builder.rb +49 -57
  17. data/lib/selenium/webdriver/common/alert.rb +5 -15
  18. data/lib/selenium/webdriver/common/bridge_helper.rb +10 -17
  19. data/lib/selenium/webdriver/common/driver.rb +53 -68
  20. data/lib/selenium/webdriver/common/driver_extensions/{has_input_devices.rb → has_addons.rb} +13 -23
  21. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +4 -8
  22. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +4 -7
  23. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +0 -4
  24. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +0 -4
  25. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +1 -5
  26. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +0 -5
  27. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +4 -9
  28. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +7 -7
  29. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +2 -7
  30. data/lib/selenium/webdriver/common/element.rb +57 -39
  31. data/lib/selenium/webdriver/common/error.rb +204 -106
  32. data/lib/selenium/webdriver/common/file_reaper.rb +3 -11
  33. data/lib/selenium/webdriver/common/html5/local_storage.rb +6 -10
  34. data/lib/selenium/webdriver/common/html5/session_storage.rb +6 -10
  35. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +7 -18
  36. data/lib/selenium/webdriver/{safari/options.rb → common/interactions/input_device.rb} +20 -31
  37. data/lib/selenium/webdriver/common/interactions/interaction.rb +50 -0
  38. data/lib/selenium/webdriver/{safari/browser.rb → common/interactions/interactions.rb} +16 -15
  39. data/lib/selenium/webdriver/common/interactions/key_actions.rb +143 -0
  40. data/lib/selenium/webdriver/common/interactions/key_input.rb +62 -0
  41. data/lib/selenium/webdriver/{android.rb → common/interactions/none_input.rb} +11 -6
  42. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +353 -0
  43. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +132 -0
  44. data/lib/selenium/webdriver/common/keyboard.rb +7 -14
  45. data/lib/selenium/webdriver/common/keys.rb +99 -82
  46. data/lib/selenium/webdriver/common/log_entry.rb +3 -6
  47. data/lib/selenium/webdriver/common/logger.rb +140 -0
  48. data/lib/selenium/webdriver/common/logs.rb +2 -6
  49. data/lib/selenium/webdriver/common/mouse.rb +9 -14
  50. data/lib/selenium/webdriver/common/navigation.rb +2 -6
  51. data/lib/selenium/webdriver/common/options.rb +20 -23
  52. data/lib/selenium/webdriver/common/platform.rb +70 -97
  53. data/lib/selenium/webdriver/common/port_prober.rb +3 -4
  54. data/lib/selenium/webdriver/common/profile_helper.rb +6 -11
  55. data/lib/selenium/webdriver/common/proxy.rb +58 -72
  56. data/lib/selenium/webdriver/common/search_context.rb +22 -29
  57. data/lib/selenium/webdriver/common/service.rb +161 -0
  58. data/lib/selenium/webdriver/common/socket_lock.rb +6 -14
  59. data/lib/selenium/webdriver/common/socket_poller.rb +5 -12
  60. data/lib/selenium/webdriver/common/target_locator.rb +11 -15
  61. data/lib/selenium/webdriver/common/timeouts.rb +4 -8
  62. data/lib/selenium/webdriver/common/touch_action_builder.rb +2 -6
  63. data/lib/selenium/webdriver/common/touch_screen.rb +19 -23
  64. data/lib/selenium/webdriver/common/w3c_action_builder.rb +209 -0
  65. data/lib/selenium/webdriver/{phantomjs.rb → common/w3c_options.rb} +16 -14
  66. data/lib/selenium/webdriver/common/wait.rb +6 -13
  67. data/lib/selenium/webdriver/common/window.rb +48 -17
  68. data/lib/selenium/webdriver/common/zipper.rb +6 -10
  69. data/lib/selenium/webdriver/edge.rb +5 -12
  70. data/lib/selenium/webdriver/edge/bridge.rb +32 -63
  71. data/lib/selenium/webdriver/edge/driver.rb +73 -0
  72. data/lib/selenium/webdriver/edge/service.rb +18 -87
  73. data/lib/selenium/webdriver/firefox.rb +20 -11
  74. data/lib/selenium/webdriver/firefox/binary.rb +40 -56
  75. data/lib/selenium/webdriver/firefox/driver.rb +48 -0
  76. data/lib/selenium/webdriver/firefox/extension.rb +18 -8
  77. data/lib/selenium/webdriver/firefox/extension/prefs.json +3 -11
  78. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  79. data/lib/selenium/webdriver/firefox/launcher.rb +13 -22
  80. data/lib/selenium/webdriver/firefox/legacy/driver.rb +79 -0
  81. data/lib/selenium/webdriver/{iphone.rb → firefox/marionette/bridge.rb} +25 -6
  82. data/lib/selenium/webdriver/firefox/marionette/driver.rb +96 -0
  83. data/lib/selenium/webdriver/firefox/options.rb +149 -0
  84. data/lib/selenium/webdriver/firefox/profile.rb +46 -46
  85. data/lib/selenium/webdriver/firefox/profiles_ini.rb +8 -18
  86. data/lib/selenium/webdriver/firefox/service.rb +23 -83
  87. data/lib/selenium/webdriver/firefox/util.rb +0 -4
  88. data/lib/selenium/webdriver/ie.rb +4 -8
  89. data/lib/selenium/webdriver/ie/driver.rb +90 -0
  90. data/lib/selenium/webdriver/ie/options.rb +136 -0
  91. data/lib/selenium/webdriver/ie/service.rb +58 -0
  92. data/lib/selenium/webdriver/remote.rb +8 -16
  93. data/lib/selenium/webdriver/remote/bridge.rb +96 -565
  94. data/lib/selenium/webdriver/remote/capabilities.rb +76 -94
  95. data/lib/selenium/webdriver/remote/driver.rb +49 -0
  96. data/lib/selenium/webdriver/remote/http/common.rb +22 -20
  97. data/lib/selenium/webdriver/remote/http/curb.rb +9 -12
  98. data/lib/selenium/webdriver/remote/http/default.rb +54 -41
  99. data/lib/selenium/webdriver/remote/http/persistent.rb +9 -8
  100. data/lib/selenium/webdriver/remote/oss/bridge.rb +586 -0
  101. data/lib/selenium/webdriver/remote/oss/commands.rb +221 -0
  102. data/lib/selenium/webdriver/remote/response.rb +39 -27
  103. data/lib/selenium/webdriver/remote/server_error.rb +1 -5
  104. data/lib/selenium/webdriver/remote/w3c/bridge.rb +573 -0
  105. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +290 -0
  106. data/lib/selenium/webdriver/remote/w3c/commands.rb +148 -0
  107. data/lib/selenium/webdriver/safari.rb +20 -29
  108. data/lib/selenium/webdriver/{firefox/w3c_bridge.rb → safari/driver.rb} +21 -30
  109. data/lib/selenium/webdriver/safari/service.rb +57 -0
  110. data/lib/selenium/webdriver/support.rb +1 -2
  111. data/lib/selenium/webdriver/support/abstract_event_listener.rb +17 -4
  112. data/lib/selenium/webdriver/support/block_event_listener.rb +1 -5
  113. data/lib/selenium/webdriver/support/color.rb +57 -42
  114. data/lib/selenium/webdriver/support/escaper.rb +41 -0
  115. data/lib/selenium/webdriver/support/event_firing_bridge.rb +36 -40
  116. data/lib/selenium/webdriver/support/select.rb +33 -86
  117. data/selenium-webdriver.gemspec +22 -25
  118. metadata +254 -261
  119. data/lib/selenium-client.rb +0 -21
  120. data/lib/selenium/client.rb +0 -57
  121. data/lib/selenium/client/base.rb +0 -151
  122. data/lib/selenium/client/driver.rb +0 -29
  123. data/lib/selenium/client/errors.rb +0 -28
  124. data/lib/selenium/client/extensions.rb +0 -132
  125. data/lib/selenium/client/idiomatic.rb +0 -507
  126. data/lib/selenium/client/javascript_expression_builder.rb +0 -135
  127. data/lib/selenium/client/javascript_frameworks/jquery.rb +0 -32
  128. data/lib/selenium/client/javascript_frameworks/prototype.rb +0 -32
  129. data/lib/selenium/client/legacy_driver.rb +0 -1722
  130. data/lib/selenium/client/protocol.rb +0 -123
  131. data/lib/selenium/client/selenium_helper.rb +0 -49
  132. data/lib/selenium/rake/server_task.rb +0 -176
  133. data/lib/selenium/webdriver/android/bridge.rb +0 -68
  134. data/lib/selenium/webdriver/chrome/bridge.rb +0 -139
  135. data/lib/selenium/webdriver/common/core_ext/base64.rb +0 -28
  136. data/lib/selenium/webdriver/common/core_ext/dir.rb +0 -61
  137. data/lib/selenium/webdriver/common/html5/location.rb +0 -19
  138. data/lib/selenium/webdriver/common/w3c_error.rb +0 -194
  139. data/lib/selenium/webdriver/edge/legacy_support.rb +0 -117
  140. data/lib/selenium/webdriver/firefox/bridge.rb +0 -89
  141. data/lib/selenium/webdriver/ie/bridge.rb +0 -88
  142. data/lib/selenium/webdriver/ie/server.rb +0 -133
  143. data/lib/selenium/webdriver/iphone/bridge.rb +0 -64
  144. data/lib/selenium/webdriver/phantomjs/bridge.rb +0 -78
  145. data/lib/selenium/webdriver/phantomjs/service.rb +0 -130
  146. data/lib/selenium/webdriver/remote/commands.rb +0 -211
  147. data/lib/selenium/webdriver/remote/w3c_bridge.rb +0 -668
  148. data/lib/selenium/webdriver/remote/w3c_capabilities.rb +0 -236
  149. data/lib/selenium/webdriver/remote/w3c_commands.rb +0 -132
  150. data/lib/selenium/webdriver/safari/bridge.rb +0 -135
  151. data/lib/selenium/webdriver/safari/resources/client.js +0 -7255
  152. data/lib/selenium/webdriver/safari/server.rb +0 -187
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -22,7 +20,7 @@ module Selenium
22
20
  module DriverExtensions
23
21
  module HasNetworkConnection
24
22
  def network_connection_type
25
- connection_value = @bridge.getNetworkConnection
23
+ connection_value = @bridge.network_connection
26
24
 
27
25
  connection_type = values_to_type[connection_value]
28
26
 
@@ -32,17 +30,17 @@ module Selenium
32
30
  end
33
31
 
34
32
  def network_connection_type=(connection_type)
35
- raise ArgumentError, "Invalid connection type" unless valid_type? connection_type
33
+ raise ArgumentError, 'Invalid connection type' unless valid_type? connection_type
36
34
 
37
35
  connection_value = type_to_values[connection_type]
38
36
 
39
- @bridge.setNetworkConnection connection_value
37
+ @bridge.network_connection = connection_value
40
38
  end
41
39
 
42
40
  private
43
41
 
44
42
  def type_to_values
45
- {:airplane_mode => 1, :wifi => 2, :data => 4, :all => 6, :none => 0}
43
+ {airplane_mode: 1, wifi: 2, data: 4, all: 6, none: 0}
46
44
  end
47
45
 
48
46
  def values_to_type
@@ -52,7 +50,6 @@ module Selenium
52
50
  def valid_type?(type)
53
51
  type_to_values.keys.include? type
54
52
  end
55
-
56
53
  end # HasNetworkConnection
57
54
  end # DriverExtensions
58
55
  end # WebDriver
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -21,11 +19,9 @@ module Selenium
21
19
  module WebDriver
22
20
  module DriverExtensions
23
21
  module HasRemoteStatus
24
-
25
22
  def remote_status
26
23
  @bridge.status
27
24
  end
28
-
29
25
  end # HasRemoteStatus
30
26
  end # DriverExtensions
31
27
  end # WebDriver
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -19,14 +17,12 @@
19
17
 
20
18
  module Selenium
21
19
  module WebDriver
22
-
23
20
  #
24
21
  # @api private
25
22
  #
26
23
 
27
24
  module DriverExtensions
28
25
  module HasSessionId
29
-
30
26
  #
31
27
  # @return [String] the session id
32
28
  # @api public
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -20,10 +18,9 @@
20
18
  module Selenium
21
19
  module WebDriver
22
20
  module DriverExtensions
23
-
24
21
  module HasTouchScreen
25
22
  def touch
26
- TouchActionBuilder.new mouse, keyboard, touch_screen
23
+ TouchActionBuilder.new Mouse.new(@bridge), Keyboard.new(@bridge), touch_screen
27
24
  end
28
25
 
29
26
  private
@@ -31,7 +28,6 @@ module Selenium
31
28
  def touch_screen
32
29
  TouchScreen.new @bridge
33
30
  end
34
-
35
31
  end # HasTouchScreen
36
32
  end # DriverExtensions
37
33
  end # WebDriver
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -19,14 +17,12 @@
19
17
 
20
18
  module Selenium
21
19
  module WebDriver
22
-
23
20
  #
24
21
  # @api private
25
22
  #
26
23
 
27
24
  module DriverExtensions
28
25
  module HasWebStorage
29
-
30
26
  def local_storage
31
27
  HTML5::LocalStorage.new @bridge
32
28
  end
@@ -34,7 +30,6 @@ module Selenium
34
30
  def session_storage
35
31
  HTML5::SessionStorage.new @bridge
36
32
  end
37
-
38
33
  end # HasWebStorage
39
34
  end # DriverExtensions
40
35
  end # WebDriver
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -19,20 +17,18 @@
19
17
 
20
18
  module Selenium
21
19
  module WebDriver
22
-
23
20
  #
24
21
  # @api private
25
22
  #
26
23
 
27
24
  module DriverExtensions
28
25
  module Rotatable
29
-
30
- ORIENTATIONS = [:landscape, :portrait]
26
+ ORIENTATIONS = [:landscape, :portrait].freeze
31
27
 
32
28
  #
33
29
  # Change the screen orientation
34
30
  #
35
- # @param [:landscape, :portrait] Orientation
31
+ # @param [:landscape, :portrait] orientation
36
32
  #
37
33
  # @api public
38
34
  #
@@ -42,7 +38,7 @@ module Selenium
42
38
  raise ArgumentError, "expected #{ORIENTATIONS.inspect}, got #{orientation.inspect}"
43
39
  end
44
40
 
45
- bridge.setScreenOrientation(orientation.to_s.upcase)
41
+ bridge.screen_orientation = orientation.to_s.upcase
46
42
  end
47
43
  alias_method :rotate, :rotation=
48
44
 
@@ -55,9 +51,8 @@ module Selenium
55
51
  #
56
52
 
57
53
  def orientation
58
- bridge.getScreenOrientation.to_sym.downcase
54
+ bridge.screen_orientation.to_sym.downcase
59
55
  end
60
-
61
56
  end # Rotatable
62
57
  end # DriverExtensions
63
58
  end # WebDriver
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -19,14 +17,12 @@
19
17
 
20
18
  module Selenium
21
19
  module WebDriver
22
-
23
20
  #
24
21
  # @api private
25
22
  #
26
23
 
27
24
  module DriverExtensions
28
25
  module TakesScreenshot
29
-
30
26
  #
31
27
  # Save a PNG screenshot to the given path
32
28
  #
@@ -34,6 +30,11 @@ module Selenium
34
30
  #
35
31
 
36
32
  def save_screenshot(png_path)
33
+ extension = File.extname(png_path).downcase
34
+ if extension != '.png'
35
+ WebDriver.logger.warn "name used for saved screenshot does not match file type. "\
36
+ "It should end with .png extension"
37
+ end
37
38
  File.open(png_path, 'wb') { |f| f << screenshot_as(:png) }
38
39
  end
39
40
 
@@ -48,14 +49,13 @@ module Selenium
48
49
  def screenshot_as(format)
49
50
  case format
50
51
  when :base64
51
- bridge.getScreenshot
52
+ bridge.screenshot
52
53
  when :png
53
- bridge.getScreenshot.unpack("m")[0]
54
+ bridge.screenshot.unpack('m')[0]
54
55
  else
55
56
  raise Error::UnsupportedOperationError, "unsupported format: #{format.inspect}"
56
57
  end
57
58
  end
58
-
59
59
  end # TakesScreenshot
60
60
  end # DriverExtensions
61
61
  end # WebDriver
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -19,14 +17,12 @@
19
17
 
20
18
  module Selenium
21
19
  module WebDriver
22
-
23
20
  #
24
21
  # @api private
25
22
  #
26
23
 
27
24
  module DriverExtensions
28
25
  module UploadsFiles
29
-
30
26
  #
31
27
  # Set the file detector to pass local files to a remote WebDriver.
32
28
  #
@@ -52,13 +48,12 @@ module Selenium
52
48
  #
53
49
 
54
50
  def file_detector=(detector)
55
- unless detector.nil? or detector.respond_to? :call
56
- raise ArgumentError, "detector must respond to #call"
51
+ unless detector.nil? || detector.respond_to?(:call)
52
+ raise ArgumentError, 'detector must respond to #call'
57
53
  end
58
54
 
59
55
  bridge.file_detector = detector
60
56
  end
61
-
62
57
  end # UploadsFiles
63
58
  end # DriverExtensions
64
59
  end # WebDriver
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -29,15 +27,16 @@ module Selenium
29
27
  #
30
28
 
31
29
  def initialize(bridge, id)
32
- @bridge, @id = bridge, id
30
+ @bridge = bridge
31
+ @id = id
33
32
  end
34
33
 
35
34
  def inspect
36
- '#<%s:0x%x id=%s>' % [self.class, hash*2, @id.inspect]
35
+ format '#<%s:0x%x id=%s>', self.class, hash * 2, @id.inspect
37
36
  end
38
37
 
39
38
  def ==(other)
40
- other.kind_of?(self.class) && ref == other.ref
39
+ other.is_a?(self.class) && ref == other.ref
41
40
  end
42
41
  alias_method :eql?, :==
43
42
 
@@ -63,14 +62,14 @@ module Selenium
63
62
  #
64
63
  # @example Click on a button
65
64
  #
66
- # driver.find_element(:tag_name, "button").click
65
+ # driver.find_element(tag_name: "button").click
67
66
  #
68
67
  # @raise [StaleElementReferenceError] if the element no longer exists as
69
68
  # defined
70
69
  #
71
70
 
72
71
  def click
73
- bridge.clickElement @id
72
+ bridge.click_element @id
74
73
  end
75
74
 
76
75
  #
@@ -78,13 +77,13 @@ module Selenium
78
77
  #
79
78
  # @example Get the tagname of an INPUT element(returns "input")
80
79
  #
81
- # driver.find_element(:xpath, "//input").tag_name
80
+ # driver.find_element(xpath: "//input").tag_name
82
81
  #
83
82
  # @return [String] The tag name of this element.
84
83
  #
85
84
 
86
85
  def tag_name
87
- bridge.getElementTagName @id
86
+ bridge.element_tag_name @id
88
87
  end
89
88
 
90
89
  #
@@ -107,14 +106,24 @@ module Selenium
107
106
  #
108
107
  # class, readonly
109
108
  #
110
- # @param [String]
111
- # attribute name
112
- # @return [String,nil]
113
- # attribute value
109
+ # @param [String] name attribute name
110
+ # @return [String, nil] attribute value
114
111
  #
115
112
 
116
113
  def attribute(name)
117
- bridge.getElementAttribute @id, name
114
+ bridge.element_attribute self, name
115
+ end
116
+
117
+ #
118
+ # Get the value of a the given property with the same name of the element. If the value is not
119
+ # set, nil is returned.
120
+ #
121
+ # @param [String] name property name
122
+ # @return [String, nil] property value
123
+ #
124
+
125
+ def property(name)
126
+ bridge.element_property self, name
118
127
  end
119
128
 
120
129
  #
@@ -124,13 +133,13 @@ module Selenium
124
133
  #
125
134
 
126
135
  def text
127
- bridge.getElementText @id
136
+ bridge.element_text @id
128
137
  end
129
138
 
130
139
  #
131
140
  # Send keystrokes to this element
132
141
  #
133
- # @param [String, Symbol, Array]
142
+ # @param [String, Symbol, Array] args keystrokes to send
134
143
  #
135
144
  # Examples:
136
145
  #
@@ -142,7 +151,7 @@ module Selenium
142
151
  #
143
152
 
144
153
  def send_keys(*args)
145
- bridge.sendKeysToElement @id, Keys.encode(args)
154
+ bridge.send_keys_to_element @id, Keys.encode(args)
146
155
  end
147
156
  alias_method :send_key, :send_keys
148
157
 
@@ -157,7 +166,7 @@ module Selenium
157
166
  #
158
167
 
159
168
  def clear
160
- bridge.clearElement @id
169
+ bridge.clear_element @id
161
170
  end
162
171
 
163
172
  #
@@ -167,7 +176,7 @@ module Selenium
167
176
  #
168
177
 
169
178
  def enabled?
170
- bridge.isElementEnabled @id
179
+ bridge.element_enabled? @id
171
180
  end
172
181
 
173
182
  #
@@ -177,7 +186,7 @@ module Selenium
177
186
  #
178
187
 
179
188
  def selected?
180
- bridge.isElementSelected @id
189
+ bridge.element_selected? @id
181
190
  end
182
191
 
183
192
  #
@@ -187,7 +196,7 @@ module Selenium
187
196
  #
188
197
 
189
198
  def displayed?
190
- bridge.isElementDisplayed @id
199
+ bridge.element_displayed? @id
191
200
  end
192
201
 
193
202
  #
@@ -195,7 +204,7 @@ module Selenium
195
204
  #
196
205
 
197
206
  def submit
198
- bridge.submitElement @id
207
+ bridge.submit_element @id
199
208
  end
200
209
 
201
210
  #
@@ -210,7 +219,7 @@ module Selenium
210
219
  #
211
220
 
212
221
  def css_value(prop)
213
- bridge.getElementValueOfCssProperty @id, prop
222
+ bridge.element_value_of_css_property @id, prop
214
223
  end
215
224
  alias_method :style, :css_value
216
225
 
@@ -221,7 +230,17 @@ module Selenium
221
230
  #
222
231
 
223
232
  def location
224
- bridge.getElementLocation @id
233
+ bridge.element_location @id
234
+ end
235
+
236
+ #
237
+ # Get the dimensions and coordinates of this element.
238
+ #
239
+ # @return [WebDriver::Rectangle]
240
+ #
241
+
242
+ def rect
243
+ bridge.element_rect @id
225
244
  end
226
245
 
227
246
  #
@@ -231,7 +250,7 @@ module Selenium
231
250
  #
232
251
 
233
252
  def location_once_scrolled_into_view
234
- bridge.getElementLocationOnceScrolledIntoView @id
253
+ bridge.element_location_once_scrolled_into_view @id
235
254
  end
236
255
 
237
256
  #
@@ -241,19 +260,19 @@ module Selenium
241
260
  #
242
261
 
243
262
  def size
244
- bridge.getElementSize @id
263
+ bridge.element_size @id
245
264
  end
246
265
 
247
266
  #-------------------------------- sugar --------------------------------
248
267
 
249
268
  #
250
- # element.first(:id, 'foo')
269
+ # element.first(id: 'foo')
251
270
  #
252
271
 
253
272
  alias_method :first, :find_element
254
273
 
255
274
  #
256
- # element.all(:class, 'bar')
275
+ # element.all(class: 'bar')
257
276
  #
258
277
 
259
278
  alias_method :all, :find_elements
@@ -280,7 +299,7 @@ module Selenium
280
299
  # @api private
281
300
  #
282
301
 
283
- def to_json(*args)
302
+ def to_json(*)
284
303
  JSON.generate as_json
285
304
  end
286
305
 
@@ -290,26 +309,25 @@ module Selenium
290
309
  # @api private
291
310
  #
292
311
 
293
- def as_json(opts = nil)
294
- {
295
- :ELEMENT => @id,
296
- "element-6066-11e4-a52e-4f735466cecf" => @id
297
- }
312
+ def as_json(*)
313
+ key = if bridge.dialect == :w3c
314
+ 'element-6066-11e4-a52e-4f735466cecf'
315
+ else
316
+ 'ELEMENT'
317
+ end
318
+ @id.is_a?(Hash) ? @id : {key => @id}
298
319
  end
299
320
 
300
321
  private
301
322
 
302
- def bridge
303
- @bridge
304
- end
323
+ attr_reader :bridge
305
324
 
306
325
  def selectable?
307
326
  tn = tag_name.downcase
308
327
  type = attribute(:type).to_s.downcase
309
328
 
310
- tn == "option" || (tn == "input" && %w[radio checkbox].include?(type))
329
+ tn == 'option' || (tn == 'input' && %w[radio checkbox].include?(type))
311
330
  end
312
-
313
331
  end # Element
314
332
  end # WebDriver
315
333
  end # Selenium