selenium-webdriver 3.141.0 → 3.141.592

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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +78 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE +1 -1
  5. data/lib/selenium-webdriver.rb +2 -0
  6. data/lib/selenium/server.rb +9 -7
  7. data/lib/selenium/webdriver.rb +3 -1
  8. data/lib/selenium/webdriver/atoms.rb +20 -1
  9. data/lib/selenium/webdriver/atoms/getAttribute.js +6 -7
  10. data/lib/selenium/webdriver/atoms/isDisplayed.js +60 -59
  11. data/lib/selenium/webdriver/chrome.rb +10 -4
  12. data/lib/selenium/webdriver/chrome/bridge.rb +5 -3
  13. data/lib/selenium/webdriver/chrome/driver.rb +10 -13
  14. data/lib/selenium/webdriver/chrome/options.rb +4 -4
  15. data/lib/selenium/webdriver/chrome/profile.rb +4 -3
  16. data/lib/selenium/webdriver/chrome/service.rb +13 -13
  17. data/lib/selenium/webdriver/common.rb +4 -2
  18. data/lib/selenium/webdriver/common/action_builder.rb +2 -0
  19. data/lib/selenium/webdriver/common/alert.rb +2 -0
  20. data/lib/selenium/webdriver/common/bridge_helper.rb +8 -5
  21. data/lib/selenium/webdriver/common/driver.rb +22 -7
  22. data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +2 -0
  23. data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +2 -0
  24. data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +2 -0
  25. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +3 -3
  26. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +2 -0
  27. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +3 -1
  28. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +2 -0
  29. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +2 -0
  30. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +2 -0
  31. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +2 -0
  32. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +2 -0
  33. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +3 -1
  34. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +2 -0
  35. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +3 -3
  36. data/lib/selenium/webdriver/common/element.rb +3 -1
  37. data/lib/selenium/webdriver/common/error.rb +74 -18
  38. data/lib/selenium/webdriver/common/file_reaper.rb +3 -3
  39. data/lib/selenium/webdriver/common/html5/local_storage.rb +2 -0
  40. data/lib/selenium/webdriver/common/html5/session_storage.rb +2 -0
  41. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +4 -1
  42. data/lib/selenium/webdriver/common/interactions/input_device.rb +3 -0
  43. data/lib/selenium/webdriver/common/interactions/interaction.rb +3 -0
  44. data/lib/selenium/webdriver/common/interactions/interactions.rb +3 -1
  45. data/lib/selenium/webdriver/common/interactions/key_actions.rb +2 -0
  46. data/lib/selenium/webdriver/common/interactions/key_input.rb +4 -0
  47. data/lib/selenium/webdriver/common/interactions/none_input.rb +3 -0
  48. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +2 -0
  49. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +7 -0
  50. data/lib/selenium/webdriver/common/keyboard.rb +4 -1
  51. data/lib/selenium/webdriver/common/keys.rb +3 -0
  52. data/lib/selenium/webdriver/common/log_entry.rb +4 -2
  53. data/lib/selenium/webdriver/common/logger.rb +15 -40
  54. data/lib/selenium/webdriver/common/logs.rb +2 -0
  55. data/lib/selenium/webdriver/common/manager.rb +177 -0
  56. data/lib/selenium/webdriver/common/mouse.rb +3 -0
  57. data/lib/selenium/webdriver/common/navigation.rb +2 -0
  58. data/lib/selenium/webdriver/common/options.rb +26 -0
  59. data/lib/selenium/webdriver/common/platform.rb +26 -30
  60. data/lib/selenium/webdriver/common/port_prober.rb +6 -19
  61. data/lib/selenium/webdriver/common/profile_helper.rb +2 -0
  62. data/lib/selenium/webdriver/common/proxy.rb +13 -5
  63. data/lib/selenium/webdriver/common/search_context.rb +4 -6
  64. data/lib/selenium/webdriver/common/service.rb +74 -29
  65. data/lib/selenium/webdriver/common/socket_lock.rb +10 -3
  66. data/lib/selenium/webdriver/common/socket_poller.rb +45 -48
  67. data/lib/selenium/webdriver/common/target_locator.rb +6 -4
  68. data/lib/selenium/webdriver/common/timeouts.rb +2 -0
  69. data/lib/selenium/webdriver/common/touch_action_builder.rb +5 -6
  70. data/lib/selenium/webdriver/common/touch_screen.rb +4 -1
  71. data/lib/selenium/webdriver/common/w3c_action_builder.rb +3 -0
  72. data/lib/selenium/webdriver/common/w3c_manager.rb +45 -0
  73. data/lib/selenium/webdriver/common/w3c_options.rb +2 -0
  74. data/lib/selenium/webdriver/common/wait.rb +11 -3
  75. data/lib/selenium/webdriver/common/window.rb +2 -0
  76. data/lib/selenium/webdriver/common/zipper.rb +3 -3
  77. data/lib/selenium/webdriver/edge.rb +11 -5
  78. data/lib/selenium/webdriver/edge/bridge.rb +2 -0
  79. data/lib/selenium/webdriver/edge/driver.rb +5 -12
  80. data/lib/selenium/webdriver/edge/options.rb +3 -0
  81. data/lib/selenium/webdriver/edge/service.rb +8 -12
  82. data/lib/selenium/webdriver/firefox.rb +10 -4
  83. data/lib/selenium/webdriver/firefox/binary.rb +7 -6
  84. data/lib/selenium/webdriver/firefox/bridge.rb +47 -0
  85. data/lib/selenium/webdriver/firefox/driver.rb +3 -2
  86. data/lib/selenium/webdriver/firefox/extension.rb +4 -4
  87. data/lib/selenium/webdriver/firefox/launcher.rb +3 -0
  88. data/lib/selenium/webdriver/firefox/legacy/driver.rb +7 -3
  89. data/lib/selenium/webdriver/firefox/marionette/bridge.rb +4 -2
  90. data/lib/selenium/webdriver/firefox/marionette/driver.rb +5 -11
  91. data/lib/selenium/webdriver/firefox/options.rb +3 -1
  92. data/lib/selenium/webdriver/firefox/profile.rb +7 -8
  93. data/lib/selenium/webdriver/firefox/profiles_ini.rb +3 -0
  94. data/lib/selenium/webdriver/firefox/service.rb +8 -19
  95. data/lib/selenium/webdriver/firefox/util.rb +2 -0
  96. data/lib/selenium/webdriver/ie.rb +10 -4
  97. data/lib/selenium/webdriver/ie/driver.rb +4 -10
  98. data/lib/selenium/webdriver/ie/options.rb +4 -2
  99. data/lib/selenium/webdriver/ie/service.rb +8 -12
  100. data/lib/selenium/webdriver/remote.rb +2 -0
  101. data/lib/selenium/webdriver/remote/bridge.rb +6 -4
  102. data/lib/selenium/webdriver/remote/capabilities.rb +23 -10
  103. data/lib/selenium/webdriver/remote/commands.rb +156 -0
  104. data/lib/selenium/webdriver/remote/driver.rb +2 -0
  105. data/lib/selenium/webdriver/remote/http/common.rb +11 -4
  106. data/lib/selenium/webdriver/remote/http/curb.rb +4 -2
  107. data/lib/selenium/webdriver/remote/http/default.rb +31 -25
  108. data/lib/selenium/webdriver/remote/http/persistent.rb +3 -1
  109. data/lib/selenium/webdriver/remote/oss/bridge.rb +5 -2
  110. data/lib/selenium/webdriver/remote/oss/commands.rb +106 -104
  111. data/lib/selenium/webdriver/remote/response.rb +10 -4
  112. data/lib/selenium/webdriver/remote/server_error.rb +2 -0
  113. data/lib/selenium/webdriver/remote/w3c/bridge.rb +28 -13
  114. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +37 -21
  115. data/lib/selenium/webdriver/remote/w3c/commands.rb +61 -58
  116. data/lib/selenium/webdriver/safari.rb +11 -4
  117. data/lib/selenium/webdriver/safari/bridge.rb +5 -3
  118. data/lib/selenium/webdriver/safari/driver.rb +8 -10
  119. data/lib/selenium/webdriver/safari/options.rb +2 -0
  120. data/lib/selenium/webdriver/safari/service.rb +6 -25
  121. data/lib/selenium/webdriver/support.rb +2 -0
  122. data/lib/selenium/webdriver/support/abstract_event_listener.rb +2 -0
  123. data/lib/selenium/webdriver/support/block_event_listener.rb +3 -1
  124. data/lib/selenium/webdriver/support/color.rb +11 -9
  125. data/lib/selenium/webdriver/support/escaper.rb +2 -0
  126. data/lib/selenium/webdriver/support/event_firing_bridge.rb +3 -1
  127. data/lib/selenium/webdriver/support/select.rb +19 -18
  128. data/lib/selenium/webdriver/version.rb +3 -1
  129. data/selenium-webdriver.gemspec +14 -7
  130. metadata +89 -21
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
2
4
  # or more contributor license agreements. See the NOTICE file
3
5
  # distributed with this work for additional information
@@ -20,7 +22,7 @@ module Selenium
20
22
  module Remote
21
23
  # @api private
22
24
  class Response
23
- STACKTRACE_KEY = 'stackTrace'.freeze
25
+ STACKTRACE_KEY = 'stackTrace'
24
26
 
25
27
  attr_reader :code, :payload
26
28
  attr_writer :payload
@@ -49,6 +51,7 @@ module Selenium
49
51
  when Hash
50
52
  msg = val['message']
51
53
  return 'unknown error' unless msg
54
+
52
55
  msg << ": #{val['alert']['text'].inspect}" if val['alert'].is_a?(Hash) && val['alert']['text']
53
56
  msg << " (#{val['class']})" if val['class']
54
57
  msg
@@ -69,6 +72,7 @@ module Selenium
69
72
  e = error
70
73
  raise e if e
71
74
  return unless @code.nil? || @code >= 400
75
+
72
76
  raise Error::ServerError, self
73
77
  end
74
78
 
@@ -77,7 +81,7 @@ module Selenium
77
81
 
78
82
  server_trace = error_payload[STACKTRACE_KEY] ||
79
83
  error_payload[STACKTRACE_KEY.downcase] ||
80
- (error_payload['value'] && error_payload['value'][STACKTRACE_KEY])
84
+ error_payload.dig('value', STACKTRACE_KEY)
81
85
  return unless server_trace
82
86
 
83
87
  backtrace = case server_trace
@@ -91,7 +95,7 @@ module Selenium
91
95
  end
92
96
 
93
97
  def backtrace_from_remote(server_trace)
94
- server_trace.map do |frame|
98
+ server_trace.map { |frame|
95
99
  next unless frame.is_a?(Hash)
96
100
 
97
101
  file = frame['fileName']
@@ -104,7 +108,7 @@ module Selenium
104
108
  meth = 'unknown' if meth.nil? || meth.empty?
105
109
 
106
110
  "[remote server] #{file}:#{line}:in `#{meth}'"
107
- end.compact
111
+ }.compact
108
112
  end
109
113
 
110
114
  def error_payload
@@ -115,11 +119,13 @@ module Selenium
115
119
 
116
120
  def status
117
121
  return unless error_payload.is_a? Hash
122
+
118
123
  @status ||= error_payload['status'] || error_payload['error']
119
124
  end
120
125
 
121
126
  def value
122
127
  return unless error_payload.is_a? Hash
128
+
123
129
  @value ||= error_payload['value'] || error_payload['message']
124
130
  end
125
131
  end # Response
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
2
4
  # or more contributor license agreements. See the NOTICE file
3
5
  # distributed with this work for additional information
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
2
4
  # or more contributor license agreements. See the NOTICE file
3
5
  # distributed with this work for additional information
@@ -116,6 +118,20 @@ module Selenium
116
118
  'return source;')
117
119
  end
118
120
 
121
+ #
122
+ # Create a new top-level browsing context
123
+ # https://w3c.github.io/webdriver/#new-window
124
+ # @param type [String] Supports two values: 'tab' and 'window'.
125
+ # Use 'tab' if you'd like the new window to share an OS-level window
126
+ # with the current browsing context.
127
+ # Use 'window' otherwise
128
+ # @return [Hash] Containing 'handle' with the value of the window handle
129
+ # and 'type' with the value of the created window type
130
+ #
131
+ def new_window(type)
132
+ execute :new_window, {}, {type: type}
133
+ end
134
+
119
135
  def switch_to_window(name)
120
136
  execute :switch_to_window, {}, {handle: name}
121
137
  end
@@ -162,16 +178,14 @@ module Selenium
162
178
  end
163
179
 
164
180
  def resize_window(width, height, handle = :current)
165
- unless handle == :current
166
- raise Error::WebDriverError, 'Switch to desired window before changing its size'
167
- end
181
+ raise Error::WebDriverError, 'Switch to desired window before changing its size' unless handle == :current
182
+
168
183
  set_window_rect(width: width, height: height)
169
184
  end
170
185
 
171
186
  def window_size(handle = :current)
172
- unless handle == :current
173
- raise Error::UnsupportedOperationError, 'Switch to desired window before getting its size'
174
- end
187
+ raise Error::UnsupportedOperationError, 'Switch to desired window before getting its size' unless handle == :current
188
+
175
189
  data = execute :get_window_rect
176
190
 
177
191
  Dimension.new data['width'], data['height']
@@ -182,9 +196,8 @@ module Selenium
182
196
  end
183
197
 
184
198
  def maximize_window(handle = :current)
185
- unless handle == :current
186
- raise Error::UnsupportedOperationError, 'Switch to desired window before changing its size'
187
- end
199
+ raise Error::UnsupportedOperationError, 'Switch to desired window before changing its size' unless handle == :current
200
+
188
201
  execute :maximize_window
189
202
  end
190
203
 
@@ -203,7 +216,7 @@ module Selenium
203
216
 
204
217
  def set_window_rect(x: nil, y: nil, width: nil, height: nil)
205
218
  params = {x: x, y: y, width: width, height: height}
206
- params.update(params) { |k, v| Integer(v) unless v.nil? }
219
+ params.update(params) { |_k, v| Integer(v) unless v.nil? }
207
220
  execute :set_window_rect, {}, params
208
221
  end
209
222
 
@@ -302,8 +315,8 @@ module Selenium
302
315
  # cookies
303
316
  #
304
317
 
305
- def options
306
- @options ||= WebDriver::W3COptions.new(self)
318
+ def manage
319
+ @manage ||= WebDriver::W3CManager.new(self)
307
320
  end
308
321
 
309
322
  def add_cookie(cookie)
@@ -459,6 +472,7 @@ module Selenium
459
472
  end
460
473
 
461
474
  def element_attribute(element, name)
475
+ WebDriver.logger.info "Using script for :getAttribute of #{name}"
462
476
  execute_atom :getAttribute, element, name
463
477
  end
464
478
 
@@ -506,6 +520,7 @@ module Selenium
506
520
  end
507
521
 
508
522
  def element_displayed?(element)
523
+ WebDriver.logger.info 'Using script for :isDisplayed'
509
524
  execute_atom :isDisplayed, element
510
525
  end
511
526
 
@@ -569,7 +584,7 @@ module Selenium
569
584
  [how, what]
570
585
  end
571
586
 
572
- ESCAPE_CSS_REGEXP = /(['"\\#.:;,!?+<>=~*^$|%&@`{}\-\[\]\(\)])/
587
+ ESCAPE_CSS_REGEXP = /(['"\\#.:;,!?+<>=~*^$|%&@`{}\-\[\]\(\)])/.freeze
573
588
  UNICODE_CODE_POINT = 30
574
589
 
575
590
  # Escapes invalid characters in CSS selector.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
2
4
  # or more contributor license agreements. See the NOTICE file
3
5
  # distributed with this work for additional information
@@ -29,7 +31,7 @@ module Selenium
29
31
 
30
32
  class Capabilities
31
33
 
32
- EXTENSION_CAPABILITY_PATTERN = /\A[\w-]+:.*\z/
34
+ EXTENSION_CAPABILITY_PATTERN = /\A[\w-]+:.*\z/.freeze
33
35
 
34
36
  KNOWN = [
35
37
  :browser_name,
@@ -41,18 +43,19 @@ module Selenium
41
43
  :set_window_rect,
42
44
  :timeouts,
43
45
  :unhandled_prompt_behavior,
46
+ :strict_file_interactability,
44
47
 
45
48
  # remote-specific
46
49
  :remote_session_id,
47
50
 
48
- # TODO (alex): deprecate in favor of Firefox::Options?
51
+ # TODO: (alex) deprecate in favor of Firefox::Options?
49
52
  :accessibility_checks,
50
53
  :device,
51
54
 
52
- # TODO (alex): deprecate compatibility with OSS-capabilities
55
+ # TODO: (alex) deprecate compatibility with OSS-capabilities
53
56
  :implicit_timeout,
54
57
  :page_load_timeout,
55
- :script_timeout,
58
+ :script_timeout
56
59
  ].freeze
57
60
 
58
61
  KNOWN.each do |key|
@@ -61,7 +64,14 @@ module Selenium
61
64
  end
62
65
 
63
66
  next if key == :proxy
67
+
64
68
  define_method "#{key}=" do |value|
69
+ case key
70
+ when :accessibility_checks
71
+ WebDriver.logger.deprecate(":accessibility_checks capability")
72
+ when :device
73
+ WebDriver.logger.deprecate(":device capability")
74
+ end
65
75
  @capabilities[key] = value
66
76
  end
67
77
  end
@@ -81,20 +91,15 @@ module Selenium
81
91
 
82
92
  class << self
83
93
  def edge(opts = {})
84
- new({
85
- browser_name: 'MicrosoftEdge',
86
- platform: :windows
87
- }.merge(opts))
94
+ WebDriver.logger.deprecate('Selenium::WebDriver::Remote::W3C::Capabilities.edge',
95
+ 'Selenium::WebDriver::Remote::Capabilities.edge')
96
+ Remote::Capabilities.edge(opts)
88
97
  end
89
98
 
90
99
  def firefox(opts = {})
91
- opts[:browser_version] = opts.delete(:version) if opts.key?(:version)
92
- opts[:platform_name] = opts.delete(:platform) if opts.key?(:platform)
93
- opts[:timeouts] = {}
94
- opts[:timeouts]['implicit'] = opts.delete(:implicit_timeout) if opts.key?(:implicit_timeout)
95
- opts[:timeouts]['pageLoad'] = opts.delete(:page_load_timeout) if opts.key?(:page_load_timeout)
96
- opts[:timeouts]['script'] = opts.delete(:script_timeout) if opts.key?(:script_timeout)
97
- new({browser_name: 'firefox', marionette: true}.merge(opts))
100
+ WebDriver.logger.deprecate('Selenium::WebDriver::Remote::W3C::Capabilities.firefox',
101
+ 'Selenium::WebDriver::Remote::Capabilities.firefox')
102
+ Remote::Capabilities.firefox(opts)
98
103
  end
99
104
 
100
105
  alias_method :ff, :firefox
@@ -140,10 +145,10 @@ module Selenium
140
145
  # @param oss_capabilities [Hash, Remote::Capabilities]
141
146
  #
142
147
 
143
- def from_oss(oss_capabilities)
148
+ def from_oss(oss_capabilities) # rubocop:disable Metrics/MethodLength
144
149
  w3c_capabilities = new
145
150
 
146
- # TODO (alex): make capabilities enumerable?
151
+ # TODO: (alex) make capabilities enumerable?
147
152
  oss_capabilities = oss_capabilities.__send__(:capabilities) unless oss_capabilities.is_a?(Hash)
148
153
  oss_capabilities.each do |name, value|
149
154
  next if value.nil?
@@ -163,11 +168,23 @@ module Selenium
163
168
 
164
169
  # User can pass :firefox_options or :firefox_profile.
165
170
  #
166
- # TODO (alex): Refactor this whole method into converter class.
171
+ # TODO: (alex) Refactor this whole method into converter class.
167
172
  firefox_options = oss_capabilities['firefoxOptions'] || oss_capabilities['firefox_options'] || oss_capabilities[:firefox_options]
168
173
  firefox_profile = oss_capabilities['firefox_profile'] || oss_capabilities[:firefox_profile]
169
174
  firefox_binary = oss_capabilities['firefox_binary'] || oss_capabilities[:firefox_binary]
170
175
 
176
+ if firefox_options
177
+ WebDriver.logger.deprecate(':firefox_options capabilitiy', 'Selenium::WebDriver::Firefox::Options')
178
+ end
179
+
180
+ if firefox_profile
181
+ WebDriver.logger.deprecate(':firefox_profile capabilitiy', 'Selenium::WebDriver::Firefox::Options#profile')
182
+ end
183
+
184
+ if firefox_binary
185
+ WebDriver.logger.deprecate(':firefox_binary capabilitiy', 'Selenium::WebDriver::Firefox::Options#binary')
186
+ end
187
+
171
188
  if firefox_profile && firefox_options
172
189
  second_profile = firefox_options['profile'] || firefox_options[:profile]
173
190
  if second_profile && firefox_profile != second_profile
@@ -250,9 +267,7 @@ module Selenium
250
267
  if value
251
268
  hash['proxy'] = value.as_json
252
269
  hash['proxy']['proxyType'] &&= hash['proxy']['proxyType'].downcase
253
- if hash['proxy']['noProxy'].is_a?(String)
254
- hash['proxy']['noProxy'] = hash['proxy']['noProxy'].split(', ')
255
- end
270
+ hash['proxy']['noProxy'] = hash['proxy']['noProxy'].split(', ') if hash['proxy']['noProxy'].is_a?(String)
256
271
  end
257
272
  when String, :firefox_binary
258
273
  hash[key.to_s] = value
@@ -272,6 +287,7 @@ module Selenium
272
287
 
273
288
  def ==(other)
274
289
  return false unless other.is_a? self.class
290
+
275
291
  as_json == other.as_json
276
292
  end
277
293
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
2
4
  # or more contributor license agreements. See the NOTICE file
3
5
  # distributed with this work for additional information
@@ -32,119 +34,120 @@ module Selenium
32
34
  # session handling
33
35
  #
34
36
 
35
- new_session: [:post, 'session'.freeze],
36
- delete_session: [:delete, 'session/:session_id'.freeze],
37
+ new_session: [:post, 'session'],
38
+ delete_session: [:delete, 'session/:session_id'],
37
39
 
38
40
  #
39
41
  # basic driver
40
42
  #
41
43
 
42
- get: [:post, 'session/:session_id/url'.freeze],
43
- get_current_url: [:get, 'session/:session_id/url'.freeze],
44
- back: [:post, 'session/:session_id/back'.freeze],
45
- forward: [:post, 'session/:session_id/forward'.freeze],
46
- refresh: [:post, 'session/:session_id/refresh'.freeze],
47
- get_title: [:get, 'session/:session_id/title'.freeze],
44
+ get: [:post, 'session/:session_id/url'],
45
+ get_current_url: [:get, 'session/:session_id/url'],
46
+ back: [:post, 'session/:session_id/back'],
47
+ forward: [:post, 'session/:session_id/forward'],
48
+ refresh: [:post, 'session/:session_id/refresh'],
49
+ get_title: [:get, 'session/:session_id/title'],
48
50
 
49
51
  #
50
52
  # window and Frame handling
51
53
  #
52
54
 
53
- get_window_handle: [:get, 'session/:session_id/window'.freeze],
54
- close_window: [:delete, 'session/:session_id/window'.freeze],
55
- switch_to_window: [:post, 'session/:session_id/window'.freeze],
56
- get_window_handles: [:get, 'session/:session_id/window/handles'.freeze],
57
- fullscreen_window: [:post, 'session/:session_id/window/fullscreen'.freeze],
58
- minimize_window: [:post, 'session/:session_id/window/minimize'.freeze],
59
- maximize_window: [:post, 'session/:session_id/window/maximize'.freeze],
60
- set_window_size: [:post, 'session/:session_id/window/size'.freeze],
61
- get_window_size: [:get, 'session/:session_id/window/size'.freeze],
62
- set_window_position: [:post, 'session/:session_id/window/position'.freeze],
63
- get_window_position: [:get, 'session/:session_id/window/position'.freeze],
64
- set_window_rect: [:post, 'session/:session_id/window/rect'.freeze],
65
- get_window_rect: [:get, 'session/:session_id/window/rect'.freeze],
66
- switch_to_frame: [:post, 'session/:session_id/frame'.freeze],
67
- switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'.freeze],
55
+ get_window_handle: [:get, 'session/:session_id/window'],
56
+ new_window: [:post, 'session/:session_id/window/new'],
57
+ close_window: [:delete, 'session/:session_id/window'],
58
+ switch_to_window: [:post, 'session/:session_id/window'],
59
+ get_window_handles: [:get, 'session/:session_id/window/handles'],
60
+ fullscreen_window: [:post, 'session/:session_id/window/fullscreen'],
61
+ minimize_window: [:post, 'session/:session_id/window/minimize'],
62
+ maximize_window: [:post, 'session/:session_id/window/maximize'],
63
+ set_window_size: [:post, 'session/:session_id/window/size'],
64
+ get_window_size: [:get, 'session/:session_id/window/size'],
65
+ set_window_position: [:post, 'session/:session_id/window/position'],
66
+ get_window_position: [:get, 'session/:session_id/window/position'],
67
+ set_window_rect: [:post, 'session/:session_id/window/rect'],
68
+ get_window_rect: [:get, 'session/:session_id/window/rect'],
69
+ switch_to_frame: [:post, 'session/:session_id/frame'],
70
+ switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'],
68
71
 
69
72
  #
70
73
  # element
71
74
  #
72
75
 
73
- find_element: [:post, 'session/:session_id/element'.freeze],
74
- find_elements: [:post, 'session/:session_id/elements'.freeze],
75
- find_child_element: [:post, 'session/:session_id/element/:id/element'.freeze],
76
- find_child_elements: [:post, 'session/:session_id/element/:id/elements'.freeze],
77
- get_active_element: [:get, 'session/:session_id/element/active'.freeze],
78
- is_element_selected: [:get, 'session/:session_id/element/:id/selected'.freeze],
79
- get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'.freeze],
80
- get_element_property: [:get, 'session/:session_id/element/:id/property/:name'.freeze],
81
- get_element_css_value: [:get, 'session/:session_id/element/:id/css/:property_name'.freeze],
82
- get_element_text: [:get, 'session/:session_id/element/:id/text'.freeze],
83
- get_element_tag_name: [:get, 'session/:session_id/element/:id/name'.freeze],
84
- get_element_rect: [:get, 'session/:session_id/element/:id/rect'.freeze],
85
- is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'.freeze],
76
+ find_element: [:post, 'session/:session_id/element'],
77
+ find_elements: [:post, 'session/:session_id/elements'],
78
+ find_child_element: [:post, 'session/:session_id/element/:id/element'],
79
+ find_child_elements: [:post, 'session/:session_id/element/:id/elements'],
80
+ get_active_element: [:get, 'session/:session_id/element/active'],
81
+ is_element_selected: [:get, 'session/:session_id/element/:id/selected'],
82
+ get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'],
83
+ get_element_property: [:get, 'session/:session_id/element/:id/property/:name'],
84
+ get_element_css_value: [:get, 'session/:session_id/element/:id/css/:property_name'],
85
+ get_element_text: [:get, 'session/:session_id/element/:id/text'],
86
+ get_element_tag_name: [:get, 'session/:session_id/element/:id/name'],
87
+ get_element_rect: [:get, 'session/:session_id/element/:id/rect'],
88
+ is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'],
86
89
 
87
90
  #
88
91
  # document handling
89
92
  #
90
93
 
91
- get_page_source: [:get, 'session/:session_id/source'.freeze],
92
- execute_script: [:post, 'session/:session_id/execute/sync'.freeze],
93
- execute_async_script: [:post, 'session/:session_id/execute/async'.freeze],
94
+ get_page_source: [:get, 'session/:session_id/source'],
95
+ execute_script: [:post, 'session/:session_id/execute/sync'],
96
+ execute_async_script: [:post, 'session/:session_id/execute/async'],
94
97
 
95
98
  #
96
99
  # cookies
97
100
  #
98
101
 
99
- get_all_cookies: [:get, 'session/:session_id/cookie'.freeze],
100
- get_cookie: [:get, 'session/:session_id/cookie/:name'.freeze],
101
- add_cookie: [:post, 'session/:session_id/cookie'.freeze],
102
- delete_cookie: [:delete, 'session/:session_id/cookie/:name'.freeze],
103
- delete_all_cookies: [:delete, 'session/:session_id/cookie'.freeze],
102
+ get_all_cookies: [:get, 'session/:session_id/cookie'],
103
+ get_cookie: [:get, 'session/:session_id/cookie/:name'],
104
+ add_cookie: [:post, 'session/:session_id/cookie'],
105
+ delete_cookie: [:delete, 'session/:session_id/cookie/:name'],
106
+ delete_all_cookies: [:delete, 'session/:session_id/cookie'],
104
107
 
105
108
  #
106
109
  # timeouts
107
110
  #
108
111
 
109
- set_timeout: [:post, 'session/:session_id/timeouts'.freeze],
112
+ set_timeout: [:post, 'session/:session_id/timeouts'],
110
113
 
111
114
  #
112
115
  # actions
113
116
  #
114
117
 
115
- actions: [:post, 'session/:session_id/actions'.freeze],
116
- release_actions: [:delete, 'session/:session_id/actions'.freeze],
118
+ actions: [:post, 'session/:session_id/actions'],
119
+ release_actions: [:delete, 'session/:session_id/actions'],
117
120
 
118
121
  #
119
122
  # Element Operations
120
123
  #
121
124
 
122
- element_click: [:post, 'session/:session_id/element/:id/click'.freeze],
123
- element_tap: [:post, 'session/:session_id/element/:id/tap'.freeze],
124
- element_clear: [:post, 'session/:session_id/element/:id/clear'.freeze],
125
- element_send_keys: [:post, 'session/:session_id/element/:id/value'.freeze],
125
+ element_click: [:post, 'session/:session_id/element/:id/click'],
126
+ element_tap: [:post, 'session/:session_id/element/:id/tap'],
127
+ element_clear: [:post, 'session/:session_id/element/:id/clear'],
128
+ element_send_keys: [:post, 'session/:session_id/element/:id/value'],
126
129
 
127
130
  #
128
131
  # alerts
129
132
  #
130
133
 
131
- dismiss_alert: [:post, 'session/:session_id/alert/dismiss'.freeze],
132
- accept_alert: [:post, 'session/:session_id/alert/accept'.freeze],
133
- get_alert_text: [:get, 'session/:session_id/alert/text'.freeze],
134
- send_alert_text: [:post, 'session/:session_id/alert/text'.freeze],
134
+ dismiss_alert: [:post, 'session/:session_id/alert/dismiss'],
135
+ accept_alert: [:post, 'session/:session_id/alert/accept'],
136
+ get_alert_text: [:get, 'session/:session_id/alert/text'],
137
+ send_alert_text: [:post, 'session/:session_id/alert/text'],
135
138
 
136
139
  #
137
140
  # screenshot
138
141
  #
139
142
 
140
- take_screenshot: [:get, 'session/:session_id/screenshot'.freeze],
141
- take_element_screenshot: [:get, 'session/:session_id/element/:id/screenshot'.freeze],
143
+ take_screenshot: [:get, 'session/:session_id/screenshot'],
144
+ take_element_screenshot: [:get, 'session/:session_id/element/:id/screenshot'],
142
145
 
143
146
  #
144
147
  # server extensions
145
148
  #
146
149
 
147
- upload_file: [:post, 'session/:session_id/se/file'.freeze]
150
+ upload_file: [:post, 'session/:session_id/se/file']
148
151
  }.freeze
149
152
 
150
153
  end # Bridge