selenium-webdriver 2.45.0 → 3.142.7

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 (172) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +795 -3
  3. data/Gemfile +2 -0
  4. data/{COPYING → LICENSE} +1 -3
  5. data/README.md +13 -9
  6. data/lib/selenium/server.rb +93 -71
  7. data/lib/selenium/webdriver/atoms/getAttribute.js +7 -0
  8. data/lib/selenium/webdriver/atoms/isDisplayed.js +102 -0
  9. data/lib/selenium/webdriver/atoms.rb +37 -0
  10. data/lib/selenium/webdriver/chrome/bridge.rb +47 -99
  11. data/lib/selenium/webdriver/chrome/driver.rb +127 -0
  12. data/lib/selenium/webdriver/chrome/options.rb +190 -0
  13. data/lib/selenium/webdriver/chrome/profile.rb +40 -20
  14. data/lib/selenium/webdriver/chrome/service.rb +46 -62
  15. data/lib/selenium/webdriver/chrome.rb +34 -6
  16. data/lib/selenium/webdriver/common/action_builder.rb +69 -56
  17. data/lib/selenium/webdriver/common/alert.rb +25 -8
  18. data/lib/selenium/webdriver/common/bridge_helper.rb +35 -20
  19. data/lib/selenium/webdriver/common/driver.rb +90 -63
  20. data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +45 -0
  21. data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +50 -0
  22. data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +42 -0
  23. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +26 -11
  24. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +51 -0
  25. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +58 -0
  26. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +51 -0
  27. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +23 -6
  28. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +19 -2
  29. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +24 -7
  30. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +19 -3
  31. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +23 -7
  32. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +26 -5
  33. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +20 -6
  34. data/lib/selenium/webdriver/common/element.rb +79 -37
  35. data/lib/selenium/webdriver/common/error.rb +282 -106
  36. data/lib/selenium/webdriver/common/file_reaper.rb +23 -12
  37. data/lib/selenium/webdriver/common/html5/local_storage.rb +29 -12
  38. data/lib/selenium/webdriver/common/html5/session_storage.rb +29 -12
  39. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +29 -18
  40. data/lib/selenium/webdriver/common/interactions/input_device.rb +54 -0
  41. data/lib/selenium/webdriver/common/interactions/interaction.rb +53 -0
  42. data/lib/selenium/webdriver/common/interactions/interactions.rb +43 -0
  43. data/lib/selenium/webdriver/common/interactions/key_actions.rb +145 -0
  44. data/lib/selenium/webdriver/common/interactions/key_input.rb +66 -0
  45. data/lib/selenium/webdriver/common/interactions/none_input.rb +36 -0
  46. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +363 -0
  47. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +139 -0
  48. data/lib/selenium/webdriver/common/keyboard.rb +27 -12
  49. data/lib/selenium/webdriver/common/keys.rb +118 -81
  50. data/lib/selenium/webdriver/common/log_entry.rb +27 -8
  51. data/lib/selenium/webdriver/common/logger.rb +115 -0
  52. data/lib/selenium/webdriver/common/logs.rb +24 -7
  53. data/lib/selenium/webdriver/common/manager.rb +177 -0
  54. data/lib/selenium/webdriver/common/mouse.rb +29 -12
  55. data/lib/selenium/webdriver/common/navigation.rb +21 -4
  56. data/lib/selenium/webdriver/common/options.rb +43 -126
  57. data/lib/selenium/webdriver/common/platform.rb +101 -97
  58. data/lib/selenium/webdriver/common/port_prober.rb +24 -17
  59. data/lib/selenium/webdriver/common/profile_helper.rb +27 -11
  60. data/lib/selenium/webdriver/common/proxy.rb +86 -73
  61. data/lib/selenium/webdriver/common/search_context.rb +49 -33
  62. data/lib/selenium/webdriver/common/service.rb +219 -0
  63. data/lib/selenium/webdriver/common/socket_lock.rb +82 -0
  64. data/lib/selenium/webdriver/common/socket_poller.rb +47 -26
  65. data/lib/selenium/webdriver/common/target_locator.rb +35 -14
  66. data/lib/selenium/webdriver/common/timeouts.rb +23 -6
  67. data/lib/selenium/webdriver/common/touch_action_builder.rb +25 -11
  68. data/lib/selenium/webdriver/common/touch_screen.rb +42 -24
  69. data/lib/selenium/webdriver/common/w3c_action_builder.rb +212 -0
  70. data/lib/selenium/webdriver/common/w3c_manager.rb +45 -0
  71. data/lib/selenium/webdriver/common/wait.rb +34 -14
  72. data/lib/selenium/webdriver/common/window.rb +75 -16
  73. data/lib/selenium/webdriver/common/zipper.rb +26 -11
  74. data/lib/selenium/webdriver/common.rb +40 -7
  75. data/lib/selenium/webdriver/edge/bridge.rb +76 -0
  76. data/lib/selenium/webdriver/edge/driver.rb +66 -0
  77. data/lib/selenium/webdriver/edge/options.rb +80 -0
  78. data/lib/selenium/webdriver/edge/service.rb +52 -0
  79. data/lib/selenium/webdriver/edge.rb +44 -0
  80. data/lib/selenium/webdriver/firefox/binary.rb +70 -48
  81. data/lib/selenium/webdriver/firefox/driver.rb +50 -0
  82. data/lib/selenium/webdriver/firefox/extension/prefs.json +14 -13
  83. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  84. data/lib/selenium/webdriver/firefox/extension.rb +50 -19
  85. data/lib/selenium/webdriver/firefox/launcher.rb +33 -28
  86. data/lib/selenium/webdriver/firefox/legacy/driver.rb +83 -0
  87. data/lib/selenium/webdriver/firefox/marionette/bridge.rb +49 -0
  88. data/lib/selenium/webdriver/firefox/marionette/driver.rb +90 -0
  89. data/lib/selenium/webdriver/firefox/options.rb +162 -0
  90. data/lib/selenium/webdriver/firefox/profile.rb +66 -48
  91. data/lib/selenium/webdriver/firefox/profiles_ini.rb +28 -16
  92. data/lib/selenium/webdriver/firefox/service.rb +52 -0
  93. data/lib/selenium/webdriver/firefox/util.rb +19 -2
  94. data/lib/selenium/webdriver/firefox.rb +46 -10
  95. data/lib/selenium/webdriver/ie/driver.rb +85 -0
  96. data/lib/selenium/webdriver/ie/options.rb +138 -0
  97. data/lib/selenium/webdriver/ie/service.rb +54 -0
  98. data/lib/selenium/webdriver/ie.rb +32 -10
  99. data/lib/selenium/webdriver/remote/bridge.rb +117 -572
  100. data/lib/selenium/webdriver/remote/capabilities.rb +116 -99
  101. data/lib/selenium/webdriver/remote/driver.rb +51 -0
  102. data/lib/selenium/webdriver/remote/http/common.rb +54 -23
  103. data/lib/selenium/webdriver/remote/http/curb.rb +30 -12
  104. data/lib/selenium/webdriver/remote/http/default.rb +85 -42
  105. data/lib/selenium/webdriver/remote/http/persistent.rb +29 -7
  106. data/lib/selenium/webdriver/remote/oss/bridge.rb +594 -0
  107. data/lib/selenium/webdriver/remote/oss/commands.rb +223 -0
  108. data/lib/selenium/webdriver/remote/response.rb +68 -30
  109. data/lib/selenium/webdriver/remote/server_error.rb +22 -5
  110. data/lib/selenium/webdriver/remote/w3c/bridge.rb +605 -0
  111. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +310 -0
  112. data/lib/selenium/webdriver/remote/w3c/commands.rb +157 -0
  113. data/lib/selenium/webdriver/remote.rb +27 -13
  114. data/lib/selenium/webdriver/safari/bridge.rb +38 -107
  115. data/lib/selenium/webdriver/safari/driver.rb +68 -0
  116. data/lib/selenium/webdriver/safari/options.rb +56 -75
  117. data/lib/selenium/webdriver/safari/service.rb +38 -0
  118. data/lib/selenium/webdriver/safari.rb +49 -31
  119. data/lib/selenium/webdriver/support/abstract_event_listener.rb +40 -6
  120. data/lib/selenium/webdriver/support/block_event_listener.rb +24 -7
  121. data/lib/selenium/webdriver/support/color.rb +82 -46
  122. data/lib/selenium/webdriver/support/escaper.rb +43 -0
  123. data/lib/selenium/webdriver/support/event_firing_bridge.rb +56 -39
  124. data/lib/selenium/webdriver/support/select.rb +66 -89
  125. data/lib/selenium/webdriver/support.rb +20 -0
  126. data/lib/selenium/webdriver/version.rb +24 -0
  127. data/lib/selenium/webdriver.rb +55 -25
  128. data/lib/selenium-webdriver.rb +19 -0
  129. data/selenium-webdriver.gemspec +42 -29
  130. metadata +331 -260
  131. data/Gemfile.lock +0 -48
  132. data/lib/selenium/client/base.rb +0 -132
  133. data/lib/selenium/client/driver.rb +0 -10
  134. data/lib/selenium/client/errors.rb +0 -9
  135. data/lib/selenium/client/extensions.rb +0 -118
  136. data/lib/selenium/client/idiomatic.rb +0 -488
  137. data/lib/selenium/client/javascript_expression_builder.rb +0 -116
  138. data/lib/selenium/client/javascript_frameworks/jquery.rb +0 -13
  139. data/lib/selenium/client/javascript_frameworks/prototype.rb +0 -13
  140. data/lib/selenium/client/legacy_driver.rb +0 -1720
  141. data/lib/selenium/client/protocol.rb +0 -104
  142. data/lib/selenium/client/selenium_helper.rb +0 -34
  143. data/lib/selenium/client.rb +0 -38
  144. data/lib/selenium/rake/server_task.rb +0 -157
  145. data/lib/selenium/webdriver/android/bridge.rb +0 -49
  146. data/lib/selenium/webdriver/android.rb +0 -9
  147. data/lib/selenium/webdriver/common/core_ext/base64.rb +0 -9
  148. data/lib/selenium/webdriver/common/core_ext/dir.rb +0 -42
  149. data/lib/selenium/webdriver/common/core_ext/string.rb +0 -5
  150. data/lib/selenium/webdriver/common/driver_extensions/has_browser_connection.rb +0 -17
  151. data/lib/selenium/webdriver/common/driver_extensions/has_input_devices.rb +0 -39
  152. data/lib/selenium/webdriver/common/html5/location.rb +0 -0
  153. data/lib/selenium/webdriver/common/json_helper.rb +0 -34
  154. data/lib/selenium/webdriver/firefox/bridge.rb +0 -70
  155. data/lib/selenium/webdriver/firefox/socket_lock.rb +0 -61
  156. data/lib/selenium/webdriver/ie/bridge.rb +0 -69
  157. data/lib/selenium/webdriver/ie/server.rb +0 -90
  158. data/lib/selenium/webdriver/iphone/bridge.rb +0 -45
  159. data/lib/selenium/webdriver/iphone.rb +0 -9
  160. data/lib/selenium/webdriver/opera/bridge.rb +0 -112
  161. data/lib/selenium/webdriver/opera/service.rb +0 -49
  162. data/lib/selenium/webdriver/opera.rb +0 -24
  163. data/lib/selenium/webdriver/phantomjs/bridge.rb +0 -59
  164. data/lib/selenium/webdriver/phantomjs/service.rb +0 -90
  165. data/lib/selenium/webdriver/phantomjs.rb +0 -22
  166. data/lib/selenium/webdriver/remote/commands.rb +0 -192
  167. data/lib/selenium/webdriver/safari/browser.rb +0 -20
  168. data/lib/selenium/webdriver/safari/extensions.rb +0 -170
  169. data/lib/selenium/webdriver/safari/resources/SafariDriver.safariextz +0 -0
  170. data/lib/selenium/webdriver/safari/resources/client.js +0 -6903
  171. data/lib/selenium/webdriver/safari/server.rb +0 -145
  172. data/lib/selenium-client.rb +0 -2
@@ -1,13 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
1
20
  module Selenium
2
21
  module WebDriver
3
-
4
22
  #
5
23
  # @api private
6
24
  #
7
25
 
8
26
  module DriverExtensions
9
27
  module HasSessionId
10
-
11
28
  #
12
29
  # @return [String] the session id
13
30
  # @api public
@@ -1,10 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
1
20
  module Selenium
2
21
  module WebDriver
3
22
  module DriverExtensions
4
-
5
23
  module HasTouchScreen
6
24
  def touch
7
- TouchActionBuilder.new mouse, keyboard, touch_screen
25
+ TouchActionBuilder.new Mouse.new(@bridge), Keyboard.new(@bridge), touch_screen
8
26
  end
9
27
 
10
28
  private
@@ -12,8 +30,7 @@ module Selenium
12
30
  def touch_screen
13
31
  TouchScreen.new @bridge
14
32
  end
15
- end
16
-
17
- end
18
- end
19
- end
33
+ end # HasTouchScreen
34
+ end # DriverExtensions
35
+ end # WebDriver
36
+ end # Selenium
@@ -1,13 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
1
20
  module Selenium
2
21
  module WebDriver
3
-
4
22
  #
5
23
  # @api private
6
24
  #
7
25
 
8
26
  module DriverExtensions
9
27
  module HasWebStorage
10
-
11
28
  def local_storage
12
29
  HTML5::LocalStorage.new @bridge
13
30
  end
@@ -15,7 +32,6 @@ module Selenium
15
32
  def session_storage
16
33
  HTML5::SessionStorage.new @bridge
17
34
  end
18
-
19
35
  end # HasWebStorage
20
36
  end # DriverExtensions
21
37
  end # WebDriver
@@ -1,19 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
1
20
  module Selenium
2
21
  module WebDriver
3
-
4
22
  #
5
23
  # @api private
6
24
  #
7
25
 
8
26
  module DriverExtensions
9
27
  module Rotatable
10
-
11
- ORIENTATIONS = [:landscape, :portrait]
28
+ ORIENTATIONS = %i[landscape portrait].freeze
12
29
 
13
30
  #
14
31
  # Change the screen orientation
15
32
  #
16
- # @param [:landscape, :portrait] Orientation
33
+ # @param [:landscape, :portrait] orientation
17
34
  #
18
35
  # @api public
19
36
  #
@@ -23,7 +40,7 @@ module Selenium
23
40
  raise ArgumentError, "expected #{ORIENTATIONS.inspect}, got #{orientation.inspect}"
24
41
  end
25
42
 
26
- bridge.setScreenOrientation(orientation.to_s.upcase)
43
+ bridge.screen_orientation = orientation.to_s.upcase
27
44
  end
28
45
  alias_method :rotate, :rotation=
29
46
 
@@ -36,9 +53,8 @@ module Selenium
36
53
  #
37
54
 
38
55
  def orientation
39
- bridge.getScreenOrientation.to_sym.downcase
56
+ bridge.screen_orientation.to_sym.downcase
40
57
  end
41
-
42
58
  end # Rotatable
43
59
  end # DriverExtensions
44
60
  end # WebDriver
@@ -1,13 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
1
20
  module Selenium
2
21
  module WebDriver
3
-
4
22
  #
5
23
  # @api private
6
24
  #
7
25
 
8
26
  module DriverExtensions
9
27
  module TakesScreenshot
10
-
11
28
  #
12
29
  # Save a PNG screenshot to the given path
13
30
  #
@@ -15,6 +32,11 @@ module Selenium
15
32
  #
16
33
 
17
34
  def save_screenshot(png_path)
35
+ extension = File.extname(png_path).downcase
36
+ if extension != '.png'
37
+ WebDriver.logger.warn "name used for saved screenshot does not match file type. "\
38
+ "It should end with .png extension"
39
+ end
18
40
  File.open(png_path, 'wb') { |f| f << screenshot_as(:png) }
19
41
  end
20
42
 
@@ -29,14 +51,13 @@ module Selenium
29
51
  def screenshot_as(format)
30
52
  case format
31
53
  when :base64
32
- bridge.getScreenshot
54
+ bridge.screenshot
33
55
  when :png
34
- bridge.getScreenshot.unpack("m")[0]
56
+ bridge.screenshot.unpack('m')[0]
35
57
  else
36
58
  raise Error::UnsupportedOperationError, "unsupported format: #{format.inspect}"
37
59
  end
38
60
  end
39
-
40
61
  end # TakesScreenshot
41
62
  end # DriverExtensions
42
63
  end # WebDriver
@@ -1,13 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
1
20
  module Selenium
2
21
  module WebDriver
3
-
4
22
  #
5
23
  # @api private
6
24
  #
7
25
 
8
26
  module DriverExtensions
9
27
  module UploadsFiles
10
-
11
28
  #
12
29
  # Set the file detector to pass local files to a remote WebDriver.
13
30
  #
@@ -33,13 +50,10 @@ module Selenium
33
50
  #
34
51
 
35
52
  def file_detector=(detector)
36
- unless detector.nil? or detector.respond_to? :call
37
- raise ArgumentError, "detector must respond to #call"
38
- end
53
+ raise ArgumentError, 'detector must respond to #call' unless detector.nil? || detector.respond_to?(:call)
39
54
 
40
55
  bridge.file_detector = detector
41
56
  end
42
-
43
57
  end # UploadsFiles
44
58
  end # DriverExtensions
45
59
  end # WebDriver
@@ -1,3 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
1
20
  module Selenium
2
21
  module WebDriver
3
22
  class Element
@@ -10,15 +29,16 @@ module Selenium
10
29
  #
11
30
 
12
31
  def initialize(bridge, id)
13
- @bridge, @id = bridge, id
32
+ @bridge = bridge
33
+ @id = id
14
34
  end
15
35
 
16
36
  def inspect
17
- '#<%s:0x%x id=%s>' % [self.class, hash*2, @id.inspect]
37
+ format '#<%<class>s:0x%<hash>x id=%<id>s>', class: self.class, hash: hash * 2, id: @id.inspect
18
38
  end
19
39
 
20
40
  def ==(other)
21
- other.kind_of?(self.class) && bridge.elementEquals(self, other)
41
+ other.is_a?(self.class) && ref == other.ref
22
42
  end
23
43
  alias_method :eql?, :==
24
44
 
@@ -44,14 +64,14 @@ module Selenium
44
64
  #
45
65
  # @example Click on a button
46
66
  #
47
- # driver.find_element(:tag_name, "button").click
67
+ # driver.find_element(tag_name: "button").click
48
68
  #
49
69
  # @raise [StaleElementReferenceError] if the element no longer exists as
50
70
  # defined
51
71
  #
52
72
 
53
73
  def click
54
- bridge.clickElement @id
74
+ bridge.click_element @id
55
75
  end
56
76
 
57
77
  #
@@ -59,13 +79,13 @@ module Selenium
59
79
  #
60
80
  # @example Get the tagname of an INPUT element(returns "input")
61
81
  #
62
- # driver.find_element(:xpath, "//input").tag_name
82
+ # driver.find_element(xpath: "//input").tag_name
63
83
  #
64
84
  # @return [String] The tag name of this element.
65
85
  #
66
86
 
67
87
  def tag_name
68
- bridge.getElementTagName @id
88
+ bridge.element_tag_name @id
69
89
  end
70
90
 
71
91
  #
@@ -88,14 +108,24 @@ module Selenium
88
108
  #
89
109
  # class, readonly
90
110
  #
91
- # @param [String]
92
- # attribute name
93
- # @return [String,nil]
94
- # attribute value
111
+ # @param [String] name attribute name
112
+ # @return [String, nil] attribute value
95
113
  #
96
114
 
97
115
  def attribute(name)
98
- bridge.getElementAttribute @id, name
116
+ bridge.element_attribute self, name
117
+ end
118
+
119
+ #
120
+ # Get the value of a the given property with the same name of the element. If the value is not
121
+ # set, nil is returned.
122
+ #
123
+ # @param [String] name property name
124
+ # @return [String, nil] property value
125
+ #
126
+
127
+ def property(name)
128
+ bridge.element_property self, name
99
129
  end
100
130
 
101
131
  #
@@ -105,13 +135,13 @@ module Selenium
105
135
  #
106
136
 
107
137
  def text
108
- bridge.getElementText @id
138
+ bridge.element_text @id
109
139
  end
110
140
 
111
141
  #
112
142
  # Send keystrokes to this element
113
143
  #
114
- # @param [String, Symbol, Array]
144
+ # @param [String, Symbol, Array] args keystrokes to send
115
145
  #
116
146
  # Examples:
117
147
  #
@@ -123,7 +153,7 @@ module Selenium
123
153
  #
124
154
 
125
155
  def send_keys(*args)
126
- bridge.sendKeysToElement @id, Keys.encode(args)
156
+ bridge.send_keys_to_element @id, Keys.encode(args)
127
157
  end
128
158
  alias_method :send_key, :send_keys
129
159
 
@@ -133,12 +163,12 @@ module Selenium
133
163
  #
134
164
  # Note that the events fired by this event may not be as you'd expect. In particular, we don't
135
165
  # fire any keyboard or mouse events. If you want to ensure keyboard events are
136
- # fired, consider using #send_keys with the backspace key. To ensure you get a change event,
166
+ # fired, consider using #send_keys with the backspace key. To ensure you get a change event,
137
167
  # consider following with a call to #send_keys with the tab key.
138
168
  #
139
169
 
140
170
  def clear
141
- bridge.clearElement @id
171
+ bridge.clear_element @id
142
172
  end
143
173
 
144
174
  #
@@ -148,7 +178,7 @@ module Selenium
148
178
  #
149
179
 
150
180
  def enabled?
151
- bridge.isElementEnabled @id
181
+ bridge.element_enabled? @id
152
182
  end
153
183
 
154
184
  #
@@ -158,7 +188,7 @@ module Selenium
158
188
  #
159
189
 
160
190
  def selected?
161
- bridge.isElementSelected @id
191
+ bridge.element_selected? @id
162
192
  end
163
193
 
164
194
  #
@@ -168,7 +198,7 @@ module Selenium
168
198
  #
169
199
 
170
200
  def displayed?
171
- bridge.isElementDisplayed @id
201
+ bridge.element_displayed? self
172
202
  end
173
203
 
174
204
  #
@@ -176,7 +206,7 @@ module Selenium
176
206
  #
177
207
 
178
208
  def submit
179
- bridge.submitElement @id
209
+ bridge.submit_element @id
180
210
  end
181
211
 
182
212
  #
@@ -191,7 +221,7 @@ module Selenium
191
221
  #
192
222
 
193
223
  def css_value(prop)
194
- bridge.getElementValueOfCssProperty @id, prop
224
+ bridge.element_value_of_css_property @id, prop
195
225
  end
196
226
  alias_method :style, :css_value
197
227
 
@@ -202,7 +232,17 @@ module Selenium
202
232
  #
203
233
 
204
234
  def location
205
- bridge.getElementLocation @id
235
+ bridge.element_location @id
236
+ end
237
+
238
+ #
239
+ # Get the dimensions and coordinates of this element.
240
+ #
241
+ # @return [WebDriver::Rectangle]
242
+ #
243
+
244
+ def rect
245
+ bridge.element_rect @id
206
246
  end
207
247
 
208
248
  #
@@ -212,7 +252,7 @@ module Selenium
212
252
  #
213
253
 
214
254
  def location_once_scrolled_into_view
215
- bridge.getElementLocationOnceScrolledIntoView @id
255
+ bridge.element_location_once_scrolled_into_view @id
216
256
  end
217
257
 
218
258
  #
@@ -222,19 +262,19 @@ module Selenium
222
262
  #
223
263
 
224
264
  def size
225
- bridge.getElementSize @id
265
+ bridge.element_size @id
226
266
  end
227
267
 
228
268
  #-------------------------------- sugar --------------------------------
229
269
 
230
270
  #
231
- # element.first(:id, 'foo')
271
+ # element.first(id: 'foo')
232
272
  #
233
273
 
234
274
  alias_method :first, :find_element
235
275
 
236
276
  #
237
- # element.all(:class, 'bar')
277
+ # element.all(class: 'bar')
238
278
  #
239
279
 
240
280
  alias_method :all, :find_elements
@@ -256,13 +296,13 @@ module Selenium
256
296
 
257
297
  #
258
298
  # Convert to a WebElement JSON Object for transmission over the wire.
259
- # @see http://code.google.com/p/selenium/wiki/JsonWireProtocol#Basic_Concepts_And_Terms
299
+ # @see https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#basic-terms-and-concepts
260
300
  #
261
301
  # @api private
262
302
  #
263
303
 
264
- def to_json(*args)
265
- WebDriver.json_dump as_json
304
+ def to_json(*)
305
+ JSON.generate as_json
266
306
  end
267
307
 
268
308
  #
@@ -271,23 +311,25 @@ module Selenium
271
311
  # @api private
272
312
  #
273
313
 
274
- def as_json(opts = nil)
275
- { :ELEMENT => @id }
314
+ def as_json(*)
315
+ key = if bridge.dialect == :w3c
316
+ 'element-6066-11e4-a52e-4f735466cecf'
317
+ else
318
+ 'ELEMENT'
319
+ end
320
+ @id.is_a?(Hash) ? @id : {key => @id}
276
321
  end
277
322
 
278
323
  private
279
324
 
280
- def bridge
281
- @bridge
282
- end
325
+ attr_reader :bridge
283
326
 
284
327
  def selectable?
285
328
  tn = tag_name.downcase
286
329
  type = attribute(:type).to_s.downcase
287
330
 
288
- tn == "option" || (tn == "input" && %w[radio checkbox].include?(type))
331
+ tn == 'option' || (tn == 'input' && %w[radio checkbox].include?(type))
289
332
  end
290
-
291
333
  end # Element
292
334
  end # WebDriver
293
335
  end # Selenium