selenium-webdriver 4.0.0.alpha1 → 4.0.0.alpha2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +8 -1
  3. data/lib/selenium/webdriver/version.rb +1 -1
  4. metadata +2 -26
  5. data/lib/selenium/webdriver/common/bridge_helper.rb +0 -82
  6. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +0 -36
  7. data/lib/selenium/webdriver/common/keyboard.rb +0 -70
  8. data/lib/selenium/webdriver/common/mouse.rb +0 -89
  9. data/lib/selenium/webdriver/common/options.rb +0 -177
  10. data/lib/selenium/webdriver/common/touch_action_builder.rb +0 -78
  11. data/lib/selenium/webdriver/common/touch_screen.rb +0 -123
  12. data/lib/selenium/webdriver/common/w3c_action_builder.rb +0 -212
  13. data/lib/selenium/webdriver/common/w3c_manager.rb +0 -45
  14. data/lib/selenium/webdriver/common/w3c_options.rb +0 -45
  15. data/lib/selenium/webdriver/edge/bridge.rb +0 -76
  16. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  17. data/lib/selenium/webdriver/firefox/launcher.rb +0 -111
  18. data/lib/selenium/webdriver/firefox/legacy/driver.rb +0 -83
  19. data/lib/selenium/webdriver/firefox/marionette/bridge.rb +0 -49
  20. data/lib/selenium/webdriver/firefox/marionette/driver.rb +0 -90
  21. data/lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so +0 -0
  22. data/lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so +0 -0
  23. data/lib/selenium/webdriver/firefox/util.rb +0 -46
  24. data/lib/selenium/webdriver/remote/oss/bridge.rb +0 -594
  25. data/lib/selenium/webdriver/remote/oss/commands.rb +0 -223
  26. data/lib/selenium/webdriver/remote/w3c/bridge.rb +0 -605
  27. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +0 -310
  28. data/lib/selenium/webdriver/remote/w3c/commands.rb +0 -157
@@ -1,310 +0,0 @@
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
-
20
- module Selenium
21
- module WebDriver
22
- module Remote
23
- module W3C
24
-
25
- #
26
- # Specification of the desired and/or actual capabilities of the browser that the
27
- # server is being asked to create.
28
- #
29
- # @api private
30
- #
31
-
32
- class Capabilities
33
-
34
- EXTENSION_CAPABILITY_PATTERN = /\A[\w-]+:.*\z/.freeze
35
-
36
- KNOWN = [
37
- :browser_name,
38
- :browser_version,
39
- :platform_name,
40
- :accept_insecure_certs,
41
- :page_load_strategy,
42
- :proxy,
43
- :set_window_rect,
44
- :timeouts,
45
- :unhandled_prompt_behavior,
46
- :strict_file_interactability,
47
-
48
- # remote-specific
49
- :remote_session_id,
50
-
51
- # TODO: (alex) deprecate in favor of Firefox::Options?
52
- :accessibility_checks,
53
- :device,
54
-
55
- # TODO: (alex) deprecate compatibility with OSS-capabilities
56
- :implicit_timeout,
57
- :page_load_timeout,
58
- :script_timeout
59
- ].freeze
60
-
61
- KNOWN.each do |key|
62
- define_method key do
63
- @capabilities.fetch(key)
64
- end
65
-
66
- next if key == :proxy
67
-
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
75
- @capabilities[key] = value
76
- end
77
- end
78
-
79
- #
80
- # Backward compatibility
81
- #
82
-
83
- alias_method :version, :browser_version
84
- alias_method :version=, :browser_version=
85
- alias_method :platform, :platform_name
86
- alias_method :platform=, :platform_name=
87
-
88
- #
89
- # Convenience methods for the common choices.
90
- #
91
-
92
- class << self
93
- def edge(opts = {})
94
- WebDriver.logger.deprecate('Selenium::WebDriver::Remote::W3C::Capabilities.edge',
95
- 'Selenium::WebDriver::Remote::Capabilities.edge')
96
- Remote::Capabilities.edge(opts)
97
- end
98
-
99
- def firefox(opts = {})
100
- WebDriver.logger.deprecate('Selenium::WebDriver::Remote::W3C::Capabilities.firefox',
101
- 'Selenium::WebDriver::Remote::Capabilities.firefox')
102
- Remote::Capabilities.firefox(opts)
103
- end
104
-
105
- alias_method :ff, :firefox
106
-
107
- #
108
- # @api private
109
- #
110
-
111
- def json_create(data)
112
- data = data.dup
113
-
114
- caps = new
115
- caps.browser_name = data.delete('browserName')
116
- caps.browser_version = data.delete('browserVersion')
117
- caps.platform_name = data.delete('platformName')
118
- caps.accept_insecure_certs = data.delete('acceptInsecureCerts') if data.key?('acceptInsecureCerts')
119
- caps.page_load_strategy = data.delete('pageLoadStrategy')
120
- timeouts = data.delete('timeouts')
121
- caps.implicit_timeout = timeouts['implicit'] if timeouts
122
- caps.page_load_timeout = timeouts['pageLoad'] if timeouts
123
- caps.script_timeout = timeouts['script'] if timeouts
124
-
125
- proxy = data.delete('proxy')
126
- caps.proxy = Proxy.json_create(proxy) unless proxy.nil? || proxy.empty?
127
-
128
- # Remote Server Specific
129
- caps[:remote_session_id] = data.delete('webdriver.remote.sessionid')
130
-
131
- # Marionette Specific
132
- caps[:accessibility_checks] = data.delete('moz:accessibilityChecks')
133
- caps[:profile] = data.delete('moz:profile')
134
- caps[:rotatable] = data.delete('rotatable')
135
- caps[:device] = data.delete('device')
136
-
137
- # any remaining pairs will be added as is, with no conversion
138
- caps.merge!(data)
139
-
140
- caps
141
- end
142
-
143
- #
144
- # Creates W3C compliant capabilities from OSS ones.
145
- # @param oss_capabilities [Hash, Remote::Capabilities]
146
- #
147
-
148
- def from_oss(oss_capabilities) # rubocop:disable Metrics/MethodLength
149
- w3c_capabilities = new
150
-
151
- # TODO: (alex) make capabilities enumerable?
152
- oss_capabilities = oss_capabilities.__send__(:capabilities) unless oss_capabilities.is_a?(Hash)
153
- oss_capabilities.each do |name, value|
154
- next if value.nil?
155
- next if value.is_a?(String) && value.empty?
156
-
157
- capability_name = name.to_s
158
-
159
- snake_cased_capability_names = KNOWN.map(&:to_s)
160
- camel_cased_capability_names = snake_cased_capability_names.map(&w3c_capabilities.method(:camel_case))
161
-
162
- next unless snake_cased_capability_names.include?(capability_name) ||
163
- camel_cased_capability_names.include?(capability_name) ||
164
- capability_name.match(EXTENSION_CAPABILITY_PATTERN)
165
-
166
- w3c_capabilities[name] = value
167
- end
168
-
169
- # User can pass :firefox_options or :firefox_profile.
170
- #
171
- # TODO: (alex) Refactor this whole method into converter class.
172
- firefox_options = oss_capabilities['firefoxOptions'] || oss_capabilities['firefox_options'] || oss_capabilities[:firefox_options]
173
- firefox_profile = oss_capabilities['firefox_profile'] || oss_capabilities[:firefox_profile]
174
- firefox_binary = oss_capabilities['firefox_binary'] || oss_capabilities[:firefox_binary]
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
-
188
- if firefox_profile && firefox_options
189
- second_profile = firefox_options['profile'] || firefox_options[:profile]
190
- if second_profile && firefox_profile != second_profile
191
- raise Error::WebDriverError, 'You cannot pass 2 different Firefox profiles'
192
- end
193
- end
194
-
195
- if firefox_options || firefox_profile || firefox_binary
196
- options = WebDriver::Firefox::Options.new(firefox_options || {})
197
- options.binary = firefox_binary if firefox_binary
198
- options.profile = firefox_profile if firefox_profile
199
- w3c_capabilities.merge!(options.as_json)
200
- end
201
-
202
- w3c_capabilities
203
- end
204
- end
205
-
206
- #
207
- # @param [Hash] opts
208
- # @option :browser_name [String] required browser name
209
- # @option :browser_version [String] required browser version number
210
- # @option :platform_name [Symbol] one of :any, :win, :mac, or :x
211
- # @option :accept_insecure_certs [Boolean] does the driver accept insecure SSL certifications?
212
- # @option :proxy [Selenium::WebDriver::Proxy, Hash] proxy configuration
213
- #
214
- # @api public
215
- #
216
-
217
- def initialize(opts = {})
218
- @capabilities = opts
219
- self.proxy = opts.delete(:proxy)
220
- end
221
-
222
- #
223
- # Allows setting arbitrary capabilities.
224
- #
225
-
226
- def []=(key, value)
227
- @capabilities[key] = value
228
- end
229
-
230
- def [](key)
231
- @capabilities[key]
232
- end
233
-
234
- def merge!(other)
235
- if other.respond_to?(:capabilities, true) && other.capabilities.is_a?(Hash)
236
- @capabilities.merge! other.capabilities
237
- elsif other.is_a? Hash
238
- @capabilities.merge! other
239
- else
240
- raise ArgumentError, 'argument should be a Hash or implement #capabilities'
241
- end
242
- end
243
-
244
- def proxy=(proxy)
245
- case proxy
246
- when Hash
247
- @capabilities[:proxy] = Proxy.new(proxy)
248
- when Proxy, nil
249
- @capabilities[:proxy] = proxy
250
- else
251
- raise TypeError, "expected Hash or #{Proxy.name}, got #{proxy.inspect}:#{proxy.class}"
252
- end
253
- end
254
-
255
- #
256
- # @api private
257
- #
258
-
259
- def as_json(*)
260
- hash = {}
261
-
262
- @capabilities.each do |key, value|
263
- case key
264
- when :platform
265
- hash['platform'] = value.to_s.upcase
266
- when :proxy
267
- if value
268
- hash['proxy'] = value.as_json
269
- hash['proxy']['proxyType'] &&= hash['proxy']['proxyType'].downcase
270
- hash['proxy']['noProxy'] = hash['proxy']['noProxy'].split(', ') if hash['proxy']['noProxy'].is_a?(String)
271
- end
272
- when String, :firefox_binary
273
- hash[key.to_s] = value
274
- when Symbol
275
- hash[camel_case(key.to_s)] = value
276
- else
277
- raise TypeError, "expected String or Symbol, got #{key.inspect}:#{key.class} / #{value.inspect}"
278
- end
279
- end
280
-
281
- hash
282
- end
283
-
284
- def to_json(*)
285
- JSON.generate as_json
286
- end
287
-
288
- def ==(other)
289
- return false unless other.is_a? self.class
290
-
291
- as_json == other.as_json
292
- end
293
-
294
- alias_method :eql?, :==
295
-
296
- protected
297
-
298
- attr_reader :capabilities
299
-
300
- private
301
-
302
- def camel_case(str)
303
- str.gsub(/_([a-z])/) { Regexp.last_match(1).upcase }
304
- end
305
-
306
- end # Capabilities
307
- end # W3c
308
- end # Remote
309
- end # WebDriver
310
- end # Selenium
@@ -1,157 +0,0 @@
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
-
20
- module Selenium
21
- module WebDriver
22
- module Remote
23
- module W3C
24
-
25
- #
26
- # http://www.w3.org/TR/2015/WD-webdriver-20150918/#list-of-endpoints
27
- # @api private
28
- #
29
-
30
- class Bridge
31
- COMMANDS = {
32
-
33
- #
34
- # session handling
35
- #
36
-
37
- new_session: [:post, 'session'],
38
- delete_session: [:delete, 'session/:session_id'],
39
-
40
- #
41
- # basic driver
42
- #
43
-
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'],
50
-
51
- #
52
- # window and Frame handling
53
- #
54
-
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'],
71
-
72
- #
73
- # element
74
- #
75
-
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'],
89
-
90
- #
91
- # document handling
92
- #
93
-
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'],
97
-
98
- #
99
- # cookies
100
- #
101
-
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'],
107
-
108
- #
109
- # timeouts
110
- #
111
-
112
- set_timeout: [:post, 'session/:session_id/timeouts'],
113
-
114
- #
115
- # actions
116
- #
117
-
118
- actions: [:post, 'session/:session_id/actions'],
119
- release_actions: [:delete, 'session/:session_id/actions'],
120
-
121
- #
122
- # Element Operations
123
- #
124
-
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'],
129
-
130
- #
131
- # alerts
132
- #
133
-
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'],
138
-
139
- #
140
- # screenshot
141
- #
142
-
143
- take_screenshot: [:get, 'session/:session_id/screenshot'],
144
- take_element_screenshot: [:get, 'session/:session_id/element/:id/screenshot'],
145
-
146
- #
147
- # server extensions
148
- #
149
-
150
- upload_file: [:post, 'session/:session_id/se/file']
151
- }.freeze
152
-
153
- end # Bridge
154
- end # W3C
155
- end # Remote
156
- end # WebDriver
157
- end # Selenium