selenium-webdriver 2.53.4 → 3.8.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.
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