selenium-webdriver 4.0.0.beta4 → 4.0.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.
- checksums.yaml +4 -4
- data/CHANGES +70 -0
- data/README.md +1 -1
- data/lib/selenium/webdriver/atoms/getAttribute.js +25 -25
- data/lib/selenium/webdriver/chrome/driver.rb +4 -0
- data/lib/selenium/webdriver/chrome/features.rb +44 -4
- data/lib/selenium/webdriver/chrome/options.rb +24 -1
- data/lib/selenium/webdriver/common/driver.rb +5 -1
- data/lib/selenium/webdriver/common/driver_extensions/has_apple_permissions.rb +51 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_casting.rb +77 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_context.rb +45 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_launching.rb +38 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +1 -6
- data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +17 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +87 -18
- data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +11 -11
- data/lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb +77 -0
- data/lib/selenium/webdriver/common/driver_extensions/prints_page.rb +1 -1
- data/lib/selenium/webdriver/common/element.rb +17 -8
- data/lib/selenium/webdriver/common/error.rb +12 -0
- data/lib/selenium/webdriver/common/log_entry.rb +2 -2
- data/lib/selenium/webdriver/common/manager.rb +3 -13
- data/lib/selenium/webdriver/common/options.rb +13 -5
- data/lib/selenium/webdriver/common/shadow_root.rb +87 -0
- data/lib/selenium/webdriver/common/socket_poller.rb +30 -19
- data/lib/selenium/webdriver/common/target_locator.rb +28 -0
- data/lib/selenium/webdriver/common/timeouts.rb +31 -4
- data/lib/selenium/webdriver/common/window.rb +0 -4
- data/lib/selenium/webdriver/common.rb +6 -0
- data/lib/selenium/webdriver/devtools/pinned_script.rb +59 -0
- data/lib/selenium/webdriver/devtools/request.rb +27 -17
- data/lib/selenium/webdriver/devtools/response.rb +66 -0
- data/lib/selenium/webdriver/devtools.rb +50 -12
- data/lib/selenium/webdriver/edge/features.rb +5 -0
- data/lib/selenium/webdriver/firefox/driver.rb +5 -0
- data/lib/selenium/webdriver/firefox/features.rb +14 -0
- data/lib/selenium/webdriver/firefox/options.rb +28 -1
- data/lib/selenium/webdriver/firefox.rb +0 -1
- data/lib/selenium/webdriver/ie/options.rb +3 -1
- data/lib/selenium/webdriver/ie/service.rb +1 -1
- data/lib/selenium/webdriver/remote/bridge.rb +39 -23
- data/lib/selenium/webdriver/remote/capabilities.rb +3 -2
- data/lib/selenium/webdriver/remote/commands.rb +4 -0
- data/lib/selenium/webdriver/remote/driver.rb +3 -1
- data/lib/selenium/webdriver/remote.rb +1 -1
- data/lib/selenium/webdriver/safari/driver.rb +1 -1
- data/lib/selenium/webdriver/safari/options.rb +7 -0
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +2 -2
- data/lib/selenium/webdriver/version.rb +1 -1
- data/lib/selenium/webdriver.rb +1 -0
- data/selenium-webdriver.gemspec +3 -2
- metadata +31 -3
@@ -25,7 +25,7 @@ module Selenium
|
|
25
25
|
|
26
26
|
PORT = 4444
|
27
27
|
|
28
|
-
attr_accessor :
|
28
|
+
attr_accessor :http, :file_detector
|
29
29
|
attr_reader :capabilities
|
30
30
|
|
31
31
|
#
|
@@ -93,17 +93,16 @@ module Selenium
|
|
93
93
|
execute :get, {}, {url: url}
|
94
94
|
end
|
95
95
|
|
96
|
-
|
97
|
-
|
98
|
-
|
96
|
+
#
|
97
|
+
# timeouts
|
98
|
+
#
|
99
99
|
|
100
|
-
def
|
101
|
-
|
100
|
+
def timeouts
|
101
|
+
execute :get_timeouts, {}
|
102
102
|
end
|
103
103
|
|
104
|
-
def
|
105
|
-
|
106
|
-
execute :set_timeout, {}, {type => milliseconds}
|
104
|
+
def timeouts=(timeouts)
|
105
|
+
execute :set_timeout, {}, timeouts
|
107
106
|
end
|
108
107
|
|
109
108
|
#
|
@@ -269,7 +268,7 @@ module Selenium
|
|
269
268
|
end
|
270
269
|
|
271
270
|
def element_screenshot(element)
|
272
|
-
execute :take_element_screenshot, id: element
|
271
|
+
execute :take_element_screenshot, id: element
|
273
272
|
end
|
274
273
|
|
275
274
|
#
|
@@ -431,7 +430,7 @@ module Selenium
|
|
431
430
|
end
|
432
431
|
|
433
432
|
def submit_element(element)
|
434
|
-
form = find_element_by('xpath', "./ancestor-or-self::form", element)
|
433
|
+
form = find_element_by('xpath', "./ancestor-or-self::form", [:element, element])
|
435
434
|
execute_script("var e = arguments[0].ownerDocument.createEvent('Event');" \
|
436
435
|
"e.initEvent('submit', true, true);" \
|
437
436
|
'if (arguments[0].dispatchEvent(e)) { arguments[0].submit() }', form.as_json)
|
@@ -451,19 +450,19 @@ module Selenium
|
|
451
450
|
end
|
452
451
|
|
453
452
|
def element_dom_attribute(element, name)
|
454
|
-
execute :get_element_attribute, id: element
|
453
|
+
execute :get_element_attribute, id: element, name: name
|
455
454
|
end
|
456
455
|
|
457
456
|
def element_property(element, name)
|
458
|
-
execute :get_element_property, id: element
|
457
|
+
execute :get_element_property, id: element, name: name
|
459
458
|
end
|
460
459
|
|
461
460
|
def element_aria_role(element)
|
462
|
-
execute :get_element_aria_role, id: element
|
461
|
+
execute :get_element_aria_role, id: element
|
463
462
|
end
|
464
463
|
|
465
464
|
def element_aria_label(element)
|
466
|
-
execute :get_element_aria_label, id: element
|
465
|
+
execute :get_element_aria_label, id: element
|
467
466
|
end
|
468
467
|
|
469
468
|
def element_value(element)
|
@@ -524,13 +523,17 @@ module Selenium
|
|
524
523
|
|
525
524
|
alias_method :switch_to_active_element, :active_element
|
526
525
|
|
527
|
-
def find_element_by(how, what,
|
526
|
+
def find_element_by(how, what, parent_ref = [])
|
528
527
|
how, what = convert_locator(how, what)
|
529
528
|
|
530
529
|
return execute_atom(:findElements, Support::RelativeLocator.new(what).as_json).first if how == 'relative'
|
531
530
|
|
532
|
-
|
533
|
-
|
531
|
+
parent_type, parent_id = parent_ref
|
532
|
+
id = case parent_type
|
533
|
+
when :element
|
534
|
+
execute :find_child_element, {id: parent_id}, {using: how, value: what.to_s}
|
535
|
+
when :shadow_root
|
536
|
+
execute :find_shadow_child_element, {id: parent_id}, {using: how, value: what.to_s}
|
534
537
|
else
|
535
538
|
execute :find_element, {}, {using: how, value: what.to_s}
|
536
539
|
end
|
@@ -538,13 +541,17 @@ module Selenium
|
|
538
541
|
Element.new self, element_id_from(id)
|
539
542
|
end
|
540
543
|
|
541
|
-
def find_elements_by(how, what,
|
544
|
+
def find_elements_by(how, what, parent_ref = [])
|
542
545
|
how, what = convert_locator(how, what)
|
543
546
|
|
544
547
|
return execute_atom :findElements, Support::RelativeLocator.new(what).as_json if how == 'relative'
|
545
548
|
|
546
|
-
|
547
|
-
|
549
|
+
parent_type, parent_id = parent_ref
|
550
|
+
ids = case parent_type
|
551
|
+
when :element
|
552
|
+
execute :find_child_elements, {id: parent_id}, {using: how, value: what.to_s}
|
553
|
+
when :shadow_root
|
554
|
+
execute :find_shadow_child_elements, {id: parent_id}, {using: how, value: what.to_s}
|
548
555
|
else
|
549
556
|
execute :find_elements, {}, {using: how, value: what.to_s}
|
550
557
|
end
|
@@ -552,6 +559,11 @@ module Selenium
|
|
552
559
|
ids.map { |id| Element.new self, element_id_from(id) }
|
553
560
|
end
|
554
561
|
|
562
|
+
def shadow_root(element)
|
563
|
+
id = execute :get_element_shadow_root, id: element
|
564
|
+
ShadowRoot.new self, shadow_root_id_from(id)
|
565
|
+
end
|
566
|
+
|
555
567
|
private
|
556
568
|
|
557
569
|
#
|
@@ -599,7 +611,11 @@ module Selenium
|
|
599
611
|
end
|
600
612
|
|
601
613
|
def element_id_from(id)
|
602
|
-
id['ELEMENT'] || id[
|
614
|
+
id['ELEMENT'] || id[Element::ELEMENT_KEY]
|
615
|
+
end
|
616
|
+
|
617
|
+
def shadow_root_id_from(id)
|
618
|
+
id[ShadowRoot::ROOT_KEY]
|
603
619
|
end
|
604
620
|
|
605
621
|
def prepare_capabilities_payload(capabilities)
|
@@ -641,7 +657,7 @@ module Selenium
|
|
641
657
|
# @see https://mathiasbynens.be/notes/css-escapes
|
642
658
|
def escape_css(string)
|
643
659
|
string = string.gsub(ESCAPE_CSS_REGEXP) { |match| "\\#{match}" }
|
644
|
-
string = "\\#{UNICODE_CODE_POINT + Integer(string[0])} #{string[1
|
660
|
+
string = "\\#{UNICODE_CODE_POINT + Integer(string[0])} #{string[1..]}" if string[0]&.match?(/[[:digit:]]/)
|
645
661
|
|
646
662
|
string
|
647
663
|
end
|
@@ -39,6 +39,7 @@ module Selenium
|
|
39
39
|
:timeouts,
|
40
40
|
:unhandled_prompt_behavior,
|
41
41
|
:strict_file_interactability,
|
42
|
+
:web_socket_url,
|
42
43
|
|
43
44
|
# remote-specific (webdriver.remote.sessionid)
|
44
45
|
:remote_session_id
|
@@ -46,7 +47,7 @@ module Selenium
|
|
46
47
|
|
47
48
|
(KNOWN - %i[proxy timeouts]).each do |key|
|
48
49
|
define_method key do
|
49
|
-
@capabilities
|
50
|
+
@capabilities[key]
|
50
51
|
end
|
51
52
|
|
52
53
|
define_method "#{key}=" do |value|
|
@@ -202,7 +203,7 @@ module Selenium
|
|
202
203
|
end
|
203
204
|
|
204
205
|
def proxy
|
205
|
-
@capabilities
|
206
|
+
@capabilities[:proxy]
|
206
207
|
end
|
207
208
|
|
208
209
|
def proxy=(proxy)
|
@@ -77,7 +77,10 @@ module Selenium
|
|
77
77
|
find_elements: [:post, 'session/:session_id/elements'],
|
78
78
|
find_child_element: [:post, 'session/:session_id/element/:id/element'],
|
79
79
|
find_child_elements: [:post, 'session/:session_id/element/:id/elements'],
|
80
|
+
find_shadow_child_element: [:post, 'session/:session_id/shadow/:id/element'],
|
81
|
+
find_shadow_child_elements: [:post, 'session/:session_id/shadow/:id/elements'],
|
80
82
|
get_active_element: [:get, 'session/:session_id/element/active'],
|
83
|
+
get_element_shadow_root: [:get, 'session/:session_id/element/:id/shadow'],
|
81
84
|
is_element_selected: [:get, 'session/:session_id/element/:id/selected'],
|
82
85
|
get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'],
|
83
86
|
get_element_property: [:get, 'session/:session_id/element/:id/property/:name'],
|
@@ -111,6 +114,7 @@ module Selenium
|
|
111
114
|
# timeouts
|
112
115
|
#
|
113
116
|
|
117
|
+
get_timeouts: [:get, 'session/:session_id/timeouts'],
|
114
118
|
set_timeout: [:post, 'session/:session_id/timeouts'],
|
115
119
|
|
116
120
|
#
|
@@ -42,6 +42,7 @@ module Selenium
|
|
42
42
|
end
|
43
43
|
opts[:url] ||= "http://#{Platform.localhost}:4444/wd/hub"
|
44
44
|
super
|
45
|
+
@bridge.file_detector = ->((filename, *)) { File.exist?(filename) && filename.to_s }
|
45
46
|
end
|
46
47
|
|
47
48
|
private
|
@@ -51,7 +52,8 @@ module Selenium
|
|
51
52
|
end
|
52
53
|
|
53
54
|
def devtools_version
|
54
|
-
capabilities['se:cdpVersion']
|
55
|
+
capabilities['se:cdpVersion']&.split('.')&.first ||
|
56
|
+
raise(Error::WebDriverError, "DevTools is not supported by the Remote Server")
|
55
57
|
end
|
56
58
|
end # Driver
|
57
59
|
end # Remote
|
@@ -18,6 +18,7 @@
|
|
18
18
|
# under the License.
|
19
19
|
|
20
20
|
require 'uri'
|
21
|
+
require 'selenium/webdriver/remote/server_error'
|
21
22
|
|
22
23
|
module Selenium
|
23
24
|
module WebDriver
|
@@ -25,7 +26,6 @@ module Selenium
|
|
25
26
|
autoload :Bridge, 'selenium/webdriver/remote/bridge'
|
26
27
|
autoload :Driver, 'selenium/webdriver/remote/driver'
|
27
28
|
autoload :Response, 'selenium/webdriver/remote/response'
|
28
|
-
autoload :ServerError, 'selenium/webdriver/remote/server_error'
|
29
29
|
autoload :Capabilities, 'selenium/webdriver/remote/capabilities'
|
30
30
|
autoload :COMMANDS, 'selenium/webdriver/remote/commands'
|
31
31
|
module Http
|
@@ -28,6 +28,13 @@ module Selenium
|
|
28
28
|
automatic_profiling: 'safari:automaticProfiling'}.freeze
|
29
29
|
BROWSER = 'safari'
|
30
30
|
|
31
|
+
def add_option(name, value = nil)
|
32
|
+
key = name.is_a?(Hash) ? name.keys.first : name
|
33
|
+
raise ArgumentError, 'Safari does not support options that are not namespaced' unless key.to_s.include?(':')
|
34
|
+
|
35
|
+
super
|
36
|
+
end
|
37
|
+
|
31
38
|
end # Options
|
32
39
|
end # Safari
|
33
40
|
end # WebDriver
|
@@ -76,7 +76,7 @@ module Selenium
|
|
76
76
|
@delegate.find_element_by how, what, parent
|
77
77
|
end
|
78
78
|
|
79
|
-
Element.new self, e.ref
|
79
|
+
Element.new self, e.ref.last
|
80
80
|
end
|
81
81
|
|
82
82
|
def find_elements_by(how, what, parent = nil)
|
@@ -84,7 +84,7 @@ module Selenium
|
|
84
84
|
@delegate.find_elements_by(how, what, parent)
|
85
85
|
end
|
86
86
|
|
87
|
-
es.map { |e| Element.new self, e.ref }
|
87
|
+
es.map { |e| Element.new self, e.ref.last }
|
88
88
|
end
|
89
89
|
|
90
90
|
def execute_script(script, *args)
|
data/lib/selenium/webdriver.rb
CHANGED
data/selenium-webdriver.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
}
|
29
29
|
|
30
30
|
s.required_rubygems_version = Gem::Requirement.new('> 1.3.1') if s.respond_to? :required_rubygems_version=
|
31
|
-
s.required_ruby_version = Gem::Requirement.new('>= 2.
|
31
|
+
s.required_ruby_version = Gem::Requirement.new('>= 2.6')
|
32
32
|
|
33
33
|
s.files = [
|
34
34
|
'CHANGES',
|
@@ -45,11 +45,12 @@ Gem::Specification.new do |s|
|
|
45
45
|
s.require_paths = ['lib']
|
46
46
|
|
47
47
|
s.add_runtime_dependency 'childprocess', ['>= 0.5', '< 5.0']
|
48
|
-
s.add_runtime_dependency 'rexml', ['~> 3.2']
|
48
|
+
s.add_runtime_dependency 'rexml', ['~> 3.2', '>= 3.2.5']
|
49
49
|
s.add_runtime_dependency 'rubyzip', ['>= 1.2.2']
|
50
50
|
|
51
51
|
# childprocess requires ffi on windows but doesn't declare it in its dependencies
|
52
52
|
s.add_development_dependency 'ffi'
|
53
|
+
s.add_development_dependency 'pry', ['~> 0.14']
|
53
54
|
s.add_development_dependency 'rack', ['~> 2.0']
|
54
55
|
s.add_development_dependency 'rake'
|
55
56
|
s.add_development_dependency 'rspec', ['~> 3.0']
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: selenium-webdriver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Rodionov
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2021-
|
13
|
+
date: 2021-10-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: childprocess
|
@@ -39,6 +39,9 @@ dependencies:
|
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '3.2'
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 3.2.5
|
42
45
|
type: :runtime
|
43
46
|
prerelease: false
|
44
47
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -46,6 +49,9 @@ dependencies:
|
|
46
49
|
- - "~>"
|
47
50
|
- !ruby/object:Gem::Version
|
48
51
|
version: '3.2'
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.2.5
|
49
55
|
- !ruby/object:Gem::Dependency
|
50
56
|
name: rubyzip
|
51
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -74,6 +80,20 @@ dependencies:
|
|
74
80
|
- - ">="
|
75
81
|
- !ruby/object:Gem::Version
|
76
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.14'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.14'
|
77
97
|
- !ruby/object:Gem::Dependency
|
78
98
|
name: rack
|
79
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -238,10 +258,14 @@ files:
|
|
238
258
|
- lib/selenium/webdriver/common/driver_extensions/downloads_files.rb
|
239
259
|
- lib/selenium/webdriver/common/driver_extensions/full_page_screenshot.rb
|
240
260
|
- lib/selenium/webdriver/common/driver_extensions/has_addons.rb
|
261
|
+
- lib/selenium/webdriver/common/driver_extensions/has_apple_permissions.rb
|
241
262
|
- lib/selenium/webdriver/common/driver_extensions/has_authentication.rb
|
263
|
+
- lib/selenium/webdriver/common/driver_extensions/has_casting.rb
|
242
264
|
- lib/selenium/webdriver/common/driver_extensions/has_cdp.rb
|
265
|
+
- lib/selenium/webdriver/common/driver_extensions/has_context.rb
|
243
266
|
- lib/selenium/webdriver/common/driver_extensions/has_debugger.rb
|
244
267
|
- lib/selenium/webdriver/common/driver_extensions/has_devtools.rb
|
268
|
+
- lib/selenium/webdriver/common/driver_extensions/has_launching.rb
|
245
269
|
- lib/selenium/webdriver/common/driver_extensions/has_location.rb
|
246
270
|
- lib/selenium/webdriver/common/driver_extensions/has_log_events.rb
|
247
271
|
- lib/selenium/webdriver/common/driver_extensions/has_logs.rb
|
@@ -249,6 +273,7 @@ files:
|
|
249
273
|
- lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb
|
250
274
|
- lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb
|
251
275
|
- lib/selenium/webdriver/common/driver_extensions/has_permissions.rb
|
276
|
+
- lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb
|
252
277
|
- lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb
|
253
278
|
- lib/selenium/webdriver/common/driver_extensions/has_session_id.rb
|
254
279
|
- lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb
|
@@ -282,6 +307,7 @@ files:
|
|
282
307
|
- lib/selenium/webdriver/common/search_context.rb
|
283
308
|
- lib/selenium/webdriver/common/service.rb
|
284
309
|
- lib/selenium/webdriver/common/service_manager.rb
|
310
|
+
- lib/selenium/webdriver/common/shadow_root.rb
|
285
311
|
- lib/selenium/webdriver/common/socket_lock.rb
|
286
312
|
- lib/selenium/webdriver/common/socket_poller.rb
|
287
313
|
- lib/selenium/webdriver/common/takes_screenshot.rb
|
@@ -294,7 +320,9 @@ files:
|
|
294
320
|
- lib/selenium/webdriver/devtools/console_event.rb
|
295
321
|
- lib/selenium/webdriver/devtools/exception_event.rb
|
296
322
|
- lib/selenium/webdriver/devtools/mutation_event.rb
|
323
|
+
- lib/selenium/webdriver/devtools/pinned_script.rb
|
297
324
|
- lib/selenium/webdriver/devtools/request.rb
|
325
|
+
- lib/selenium/webdriver/devtools/response.rb
|
298
326
|
- lib/selenium/webdriver/edge.rb
|
299
327
|
- lib/selenium/webdriver/edge/driver.rb
|
300
328
|
- lib/selenium/webdriver/edge/features.rb
|
@@ -358,7 +386,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
358
386
|
requirements:
|
359
387
|
- - ">="
|
360
388
|
- !ruby/object:Gem::Version
|
361
|
-
version: '2.
|
389
|
+
version: '2.6'
|
362
390
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
363
391
|
requirements:
|
364
392
|
- - ">"
|