selenium-webdriver 4.0.0.beta4 → 4.0.0.rc1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 444bcaf004013066865ffa83a058db4a2a254513f2307987fda37178b4761dfc
4
- data.tar.gz: 0b303f2f0eb16502ae5e35aaa07e6572e80baabdef2be4291bdf6c1c5bba426f
3
+ metadata.gz: 3e8ac87a660228e7b93c7fe07095cc7b01a0795dc6069bd60d8b41c01d16a3e3
4
+ data.tar.gz: 9a46eca7af76f4362c23fd2036e1a4ba8c736b598ae78a5f6db3b1affdc618c6
5
5
  SHA512:
6
- metadata.gz: e9e2cc4efb1c5e160b8d24c2a3529597665c806545ac8cbc708c373f518bc32afdd6493ead9b052e8eceee88b8a282a20c8b1fd8df175761fbeb3fe001f3c6f6
7
- data.tar.gz: 42f58624279e8d11a444236626924f20cd0c70dd7d497d92d08a97ba5519d44b3e70adb312839bf8eca0764ca38fd88610849ed555dee1146d592214ec41bdeb
6
+ metadata.gz: 4ba51c6f9e1db77a7a17f786af9d908eb2156ccd5ff39456248c1ceaefccfda7f7ed99c5bde0929adb3787bba9798e939dad7f6504d0bc8d7492969696da8f16
7
+ data.tar.gz: ac0de71814328f449a521b12df535d11699e1fe9adb83f10c9456106befc7de689cf8e69893301e5f87437d330241eef805a25abda3768d74791f5fc42bd88db
data/CHANGES CHANGED
@@ -1,3 +1,21 @@
1
+ 4.0.0.rc1 (2021-09-01)
2
+ =========================
3
+
4
+ DevTools:
5
+ * Released selenium-devtools 0.92.0 (2021-08-21) which:
6
+ - adds CDP versions 92
7
+ - removes CDP versions 88, 89, 90
8
+
9
+ IE:
10
+ * Added options for running Microsoft Edge in IE mode with IE Driver
11
+
12
+ Remote:
13
+ * Added default file detector for remote driver
14
+
15
+ Ruby:
16
+ * Fixed bug for getting valid capability that has not been set
17
+ * Fixed bug preventing loading of ServerError class
18
+
1
19
  4.0.0.beta4 (2021-06-07)
2
20
  =========================
3
21
 
@@ -37,6 +37,7 @@ module Selenium
37
37
  DriverExtensions::HasAuthentication,
38
38
  DriverExtensions::HasLogs,
39
39
  DriverExtensions::HasLogEvents,
40
+ DriverExtensions::HasPinnedScripts,
40
41
  DriverExtensions::PrintsPage].freeze
41
42
 
42
43
  def browser
@@ -297,7 +297,9 @@ module Selenium
297
297
  # @see SearchContext
298
298
  #
299
299
 
300
- def ref; end
300
+ def ref
301
+ [:driver, nil]
302
+ end
301
303
 
302
304
  private
303
305
 
@@ -112,8 +112,7 @@ module Selenium
112
112
 
113
113
  devtools.runtime.add_binding(name: '__webdriver_attribute')
114
114
  execute_script(mutation_listener)
115
- script = devtools.page.add_script_to_evaluate_on_new_document(source: mutation_listener)
116
- pinned_scripts[mutation_listener] = script['identifier']
115
+ devtools.page.add_script_to_evaluate_on_new_document(source: mutation_listener)
117
116
 
118
117
  devtools.runtime.on(:binding_called, &method(:log_mutation_event))
119
118
  end
@@ -139,10 +138,6 @@ module Selenium
139
138
  @mutation_listener ||= read_atom(:mutationListener)
140
139
  end
141
140
 
142
- def pinned_scripts
143
- @pinned_scripts ||= {}
144
- end
145
-
146
141
  end # HasLogEvents
147
142
  end # DriverExtensions
148
143
  end # WebDriver
@@ -0,0 +1,77 @@
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 DriverExtensions
23
+ module HasPinnedScripts
24
+
25
+ #
26
+ # Returns the list of all pinned scripts.
27
+ #
28
+ # @return [Array<DevTools::PinnedScript>]
29
+ #
30
+
31
+ def pinned_scripts
32
+ @pinned_scripts ||= []
33
+ end
34
+
35
+ #
36
+ # Pins JavaScript snippet that is available during the whole
37
+ # session on every page. This allows to store and call
38
+ # scripts without sending them over the wire every time.
39
+ #
40
+ # @example
41
+ # script = driver.pin_script('return window.location.href')
42
+ # driver.execute_script(script)
43
+ # # navigate to a new page
44
+ # driver.execute_script(script)
45
+ #
46
+ # @param [String] script
47
+ # @return [DevTools::PinnedScript]
48
+ #
49
+
50
+ def pin_script(script)
51
+ script = DevTools::PinnedScript.new(script)
52
+ pinned_scripts << script
53
+
54
+ devtools.page.enable
55
+ devtools.runtime.evaluate(expression: script.callable)
56
+ response = devtools.page.add_script_to_evaluate_on_new_document(source: script.callable)
57
+ script.devtools_identifier = response.dig('result', 'identifier')
58
+
59
+ script
60
+ end
61
+
62
+ #
63
+ # Unpins script making it undefined for the subsequent calls.
64
+ #
65
+ # @param [DevTools::PinnedScript]
66
+ #
67
+
68
+ def unpin_script(script)
69
+ devtools.runtime.evaluate(expression: script.remove)
70
+ devtools.page.remove_script_to_evaluate_on_new_document(identifier: script.devtools_identifier)
71
+ pinned_scripts.delete(script)
72
+ end
73
+
74
+ end # HasPinnedScripts
75
+ end # DriverExtensions
76
+ end # WebDriver
77
+ end # Selenium
@@ -143,7 +143,7 @@ module Selenium
143
143
  #
144
144
 
145
145
  def dom_attribute(name)
146
- bridge.element_dom_attribute self, name
146
+ bridge.element_dom_attribute @id, name
147
147
  end
148
148
 
149
149
  #
@@ -157,7 +157,7 @@ module Selenium
157
157
  #
158
158
 
159
159
  def property(name)
160
- bridge.element_property self, name
160
+ bridge.element_property @id, name
161
161
  end
162
162
 
163
163
  #
@@ -167,7 +167,7 @@ module Selenium
167
167
  #
168
168
 
169
169
  def aria_role
170
- bridge.element_aria_role self
170
+ bridge.element_aria_role @id
171
171
  end
172
172
 
173
173
  #
@@ -177,7 +177,7 @@ module Selenium
177
177
  #
178
178
 
179
179
  def accessible_name
180
- bridge.element_aria_label self
180
+ bridge.element_aria_label @id
181
181
  end
182
182
 
183
183
  #
@@ -317,6 +317,16 @@ module Selenium
317
317
  bridge.element_size @id
318
318
  end
319
319
 
320
+ #
321
+ # Returns the shadow root of an element.
322
+ #
323
+ # @return [WebDriver::ShadowRoot]
324
+ #
325
+
326
+ def shadow_root
327
+ bridge.shadow_root @id
328
+ end
329
+
320
330
  #-------------------------------- sugar --------------------------------
321
331
 
322
332
  #
@@ -336,14 +346,13 @@ module Selenium
336
346
  #
337
347
  alias_method :[], :attribute
338
348
 
339
- #
340
- # for SearchContext and execute_script
341
349
  #
342
350
  # @api private
351
+ # @see SearchContext
343
352
  #
344
353
 
345
354
  def ref
346
- @id
355
+ [:element, @id]
347
356
  end
348
357
 
349
358
  #
@@ -379,7 +388,7 @@ module Selenium
379
388
  end
380
389
 
381
390
  def screenshot
382
- bridge.element_screenshot(self)
391
+ bridge.element_screenshot(@id)
383
392
  end
384
393
  end # Element
385
394
  end # WebDriver
@@ -61,6 +61,12 @@ module Selenium
61
61
 
62
62
  class StaleElementReferenceError < WebDriverError; end
63
63
 
64
+ #
65
+ # A command failed because the referenced shadow root is no longer attached to the DOM.
66
+ #
67
+
68
+ class DetachedShadowRootError < WebDriverError; end
69
+
64
70
  #
65
71
  # The target element is in an invalid state, rendering it impossible to interact with, for
66
72
  # example if you click a disabled element.
@@ -93,6 +99,12 @@ module Selenium
93
99
 
94
100
  class NoSuchWindowError < WebDriverError; end
95
101
 
102
+ #
103
+ # The element does not have a shadow root.
104
+ #
105
+
106
+ class NoSuchShadowRootError < WebDriverError; end
107
+
96
108
  #
97
109
  # An illegal attempt was made to set a cookie under a different domain than the current page.
98
110
  #
@@ -0,0 +1,87 @@
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
+ class ShadowRoot
23
+ ROOT_KEY = 'shadow-6066-11e4-a52e-4f735466cecf'
24
+
25
+ include SearchContext
26
+
27
+ #
28
+ # Creates a new shadow root
29
+ #
30
+ # @api private
31
+ #
32
+
33
+ def initialize(bridge, id)
34
+ @bridge = bridge
35
+ @id = id
36
+ end
37
+
38
+ def inspect
39
+ format '#<%<class>s:0x%<hash>x id=%<id>s>', class: self.class, hash: hash * 2, id: @id.inspect
40
+ end
41
+
42
+ def ==(other)
43
+ other.is_a?(self.class) && ref == other.ref
44
+ end
45
+ alias_method :eql?, :==
46
+
47
+ def hash
48
+ @id.hash ^ @bridge.hash
49
+ end
50
+
51
+ #
52
+ # @api private
53
+ # @see SearchContext
54
+ #
55
+
56
+ def ref
57
+ [:shadow_root, @id]
58
+ end
59
+
60
+ #
61
+ # Convert to a ShadowRoot JSON Object for transmission over the wire.
62
+ # @see https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#basic-terms-and-concepts
63
+ #
64
+ # @api private
65
+ #
66
+
67
+ def to_json(*)
68
+ JSON.generate as_json
69
+ end
70
+
71
+ #
72
+ # For Rails 3 - http://jonathanjulian.com/2010/04/rails-to_json-or-as_json/
73
+ #
74
+ # @api private
75
+ #
76
+
77
+ def as_json(*)
78
+ {ROOT_KEY => @id}
79
+ end
80
+
81
+ private
82
+
83
+ attr_reader :bridge
84
+
85
+ end # ShadowRoot
86
+ end # WebDriver
87
+ end # Selenium
@@ -68,6 +68,7 @@ require 'selenium/webdriver/common/driver_extensions/has_devtools'
68
68
  require 'selenium/webdriver/common/driver_extensions/has_authentication'
69
69
  require 'selenium/webdriver/common/driver_extensions/has_logs'
70
70
  require 'selenium/webdriver/common/driver_extensions/has_log_events'
71
+ require 'selenium/webdriver/common/driver_extensions/has_pinned_scripts'
71
72
  require 'selenium/webdriver/common/driver_extensions/has_cdp'
72
73
  require 'selenium/webdriver/common/keys'
73
74
  require 'selenium/webdriver/common/profile_helper'
@@ -75,3 +76,4 @@ require 'selenium/webdriver/common/options'
75
76
  require 'selenium/webdriver/common/takes_screenshot'
76
77
  require 'selenium/webdriver/common/driver'
77
78
  require 'selenium/webdriver/common/element'
79
+ require 'selenium/webdriver/common/shadow_root'
@@ -0,0 +1,59 @@
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
+ class DevTools
23
+ class PinnedScript
24
+
25
+ attr_accessor :key, :devtools_identifier, :script
26
+
27
+ def initialize(script)
28
+ @key = SecureRandom.alphanumeric
29
+ @script = script
30
+ end
31
+
32
+ #
33
+ # @api private
34
+ #
35
+
36
+ def callable
37
+ "function __webdriver_#{key}(arguments) { #{script} }"
38
+ end
39
+
40
+ #
41
+ # @api private
42
+ #
43
+
44
+ def to_json(*)
45
+ %{"return __webdriver_#{key}(arguments)"}
46
+ end
47
+
48
+ #
49
+ # @api private
50
+ #
51
+
52
+ def remove
53
+ "__webdriver_#{key} = undefined"
54
+ end
55
+
56
+ end # PinnedScript
57
+ end # DevTools
58
+ end # WebDriver
59
+ end # Selenium
@@ -23,6 +23,7 @@ module Selenium
23
23
  autoload :ConsoleEvent, 'selenium/webdriver/devtools/console_event'
24
24
  autoload :ExceptionEvent, 'selenium/webdriver/devtools/exception_event'
25
25
  autoload :MutationEvent, 'selenium/webdriver/devtools/mutation_event'
26
+ autoload :PinnedScript, 'selenium/webdriver/devtools/pinned_script'
26
27
  autoload :Request, 'selenium/webdriver/devtools/request'
27
28
 
28
29
  def initialize(url:)
@@ -39,7 +39,9 @@ module Selenium
39
39
  persistent_hover: 'enablePersistentHover',
40
40
  require_window_focus: 'requireWindowFocus',
41
41
  use_per_process_proxy: 'ie.usePerProcessProxy',
42
- validate_cookie_document_type: 'ie.validateCookieDocumentType'
42
+ use_legacy_file_upload_dialog_handling: 'ie.useLegacyFileUploadDialogHandling',
43
+ attach_to_edge_chrome: 'ie.edgechromium',
44
+ edge_executable_path: 'ie.edgepath'
43
45
  }.freeze
44
46
  BROWSER = 'internet explorer'
45
47
 
@@ -25,7 +25,7 @@ module Selenium
25
25
  EXECUTABLE = 'IEDriverServer'
26
26
  MISSING_TEXT = <<~ERROR
27
27
  Unable to find IEDriverServer. Please download the server from
28
- http://selenium-release.storage.googleapis.com/index.html and place it somewhere on your PATH.
28
+ https://www.selenium.dev/downloads/ and place it somewhere on your PATH.
29
29
  More info at https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver.
30
30
  ERROR
31
31
  SHUTDOWN_SUPPORTED = true
@@ -269,7 +269,7 @@ module Selenium
269
269
  end
270
270
 
271
271
  def element_screenshot(element)
272
- execute :take_element_screenshot, id: element.ref
272
+ execute :take_element_screenshot, id: element
273
273
  end
274
274
 
275
275
  #
@@ -431,7 +431,7 @@ module Selenium
431
431
  end
432
432
 
433
433
  def submit_element(element)
434
- form = find_element_by('xpath', "./ancestor-or-self::form", element)
434
+ form = find_element_by('xpath', "./ancestor-or-self::form", [:element, element])
435
435
  execute_script("var e = arguments[0].ownerDocument.createEvent('Event');" \
436
436
  "e.initEvent('submit', true, true);" \
437
437
  'if (arguments[0].dispatchEvent(e)) { arguments[0].submit() }', form.as_json)
@@ -451,19 +451,19 @@ module Selenium
451
451
  end
452
452
 
453
453
  def element_dom_attribute(element, name)
454
- execute :get_element_attribute, id: element.ref, name: name
454
+ execute :get_element_attribute, id: element, name: name
455
455
  end
456
456
 
457
457
  def element_property(element, name)
458
- execute :get_element_property, id: element.ref, name: name
458
+ execute :get_element_property, id: element, name: name
459
459
  end
460
460
 
461
461
  def element_aria_role(element)
462
- execute :get_element_aria_role, id: element.ref
462
+ execute :get_element_aria_role, id: element
463
463
  end
464
464
 
465
465
  def element_aria_label(element)
466
- execute :get_element_aria_label, id: element.ref
466
+ execute :get_element_aria_label, id: element
467
467
  end
468
468
 
469
469
  def element_value(element)
@@ -524,13 +524,17 @@ module Selenium
524
524
 
525
525
  alias_method :switch_to_active_element, :active_element
526
526
 
527
- def find_element_by(how, what, parent = nil)
527
+ def find_element_by(how, what, parent_ref = [])
528
528
  how, what = convert_locator(how, what)
529
529
 
530
530
  return execute_atom(:findElements, Support::RelativeLocator.new(what).as_json).first if how == 'relative'
531
531
 
532
- id = if parent
533
- execute :find_child_element, {id: parent}, {using: how, value: what.to_s}
532
+ parent_type, parent_id = parent_ref
533
+ id = case parent_type
534
+ when :element
535
+ execute :find_child_element, {id: parent_id}, {using: how, value: what.to_s}
536
+ when :shadow_root
537
+ execute :find_shadow_child_element, {id: parent_id}, {using: how, value: what.to_s}
534
538
  else
535
539
  execute :find_element, {}, {using: how, value: what.to_s}
536
540
  end
@@ -538,13 +542,17 @@ module Selenium
538
542
  Element.new self, element_id_from(id)
539
543
  end
540
544
 
541
- def find_elements_by(how, what, parent = nil)
545
+ def find_elements_by(how, what, parent_ref = [])
542
546
  how, what = convert_locator(how, what)
543
547
 
544
548
  return execute_atom :findElements, Support::RelativeLocator.new(what).as_json if how == 'relative'
545
549
 
546
- ids = if parent
547
- execute :find_child_elements, {id: parent}, {using: how, value: what.to_s}
550
+ parent_type, parent_id = parent_ref
551
+ ids = case parent_type
552
+ when :element
553
+ execute :find_child_elements, {id: parent_id}, {using: how, value: what.to_s}
554
+ when :shadow_root
555
+ execute :find_shadow_child_elements, {id: parent_id}, {using: how, value: what.to_s}
548
556
  else
549
557
  execute :find_elements, {}, {using: how, value: what.to_s}
550
558
  end
@@ -552,6 +560,11 @@ module Selenium
552
560
  ids.map { |id| Element.new self, element_id_from(id) }
553
561
  end
554
562
 
563
+ def shadow_root(element)
564
+ id = execute :get_element_shadow_root, id: element
565
+ ShadowRoot.new self, shadow_root_id_from(id)
566
+ end
567
+
555
568
  private
556
569
 
557
570
  #
@@ -599,7 +612,11 @@ module Selenium
599
612
  end
600
613
 
601
614
  def element_id_from(id)
602
- id['ELEMENT'] || id['element-6066-11e4-a52e-4f735466cecf']
615
+ id['ELEMENT'] || id[Element::ELEMENT_KEY]
616
+ end
617
+
618
+ def shadow_root_id_from(id)
619
+ id[ShadowRoot::ROOT_KEY]
603
620
  end
604
621
 
605
622
  def prepare_capabilities_payload(capabilities)
@@ -46,7 +46,7 @@ module Selenium
46
46
 
47
47
  (KNOWN - %i[proxy timeouts]).each do |key|
48
48
  define_method key do
49
- @capabilities.fetch(key)
49
+ @capabilities[key]
50
50
  end
51
51
 
52
52
  define_method "#{key}=" do |value|
@@ -202,7 +202,7 @@ module Selenium
202
202
  end
203
203
 
204
204
  def proxy
205
- @capabilities.fetch(:proxy)
205
+ @capabilities[:proxy]
206
206
  end
207
207
 
208
208
  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'],
@@ -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
@@ -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
@@ -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)
@@ -19,6 +19,6 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
- VERSION = '4.0.0.beta4'
22
+ VERSION = '4.0.0.rc1'
23
23
  end # WebDriver
24
24
  end # Selenium
@@ -50,6 +50,7 @@ Gem::Specification.new do |s|
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.beta4
4
+ version: 4.0.0.rc1
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-06-07 00:00:00.000000000 Z
13
+ date: 2021-09-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: childprocess
@@ -74,6 +74,20 @@ dependencies:
74
74
  - - ">="
75
75
  - !ruby/object:Gem::Version
76
76
  version: '0'
77
+ - !ruby/object:Gem::Dependency
78
+ name: pry
79
+ requirement: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '0.14'
84
+ type: :development
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '0.14'
77
91
  - !ruby/object:Gem::Dependency
78
92
  name: rack
79
93
  requirement: !ruby/object:Gem::Requirement
@@ -249,6 +263,7 @@ files:
249
263
  - lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb
250
264
  - lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb
251
265
  - lib/selenium/webdriver/common/driver_extensions/has_permissions.rb
266
+ - lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb
252
267
  - lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb
253
268
  - lib/selenium/webdriver/common/driver_extensions/has_session_id.rb
254
269
  - lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb
@@ -282,6 +297,7 @@ files:
282
297
  - lib/selenium/webdriver/common/search_context.rb
283
298
  - lib/selenium/webdriver/common/service.rb
284
299
  - lib/selenium/webdriver/common/service_manager.rb
300
+ - lib/selenium/webdriver/common/shadow_root.rb
285
301
  - lib/selenium/webdriver/common/socket_lock.rb
286
302
  - lib/selenium/webdriver/common/socket_poller.rb
287
303
  - lib/selenium/webdriver/common/takes_screenshot.rb
@@ -294,6 +310,7 @@ files:
294
310
  - lib/selenium/webdriver/devtools/console_event.rb
295
311
  - lib/selenium/webdriver/devtools/exception_event.rb
296
312
  - lib/selenium/webdriver/devtools/mutation_event.rb
313
+ - lib/selenium/webdriver/devtools/pinned_script.rb
297
314
  - lib/selenium/webdriver/devtools/request.rb
298
315
  - lib/selenium/webdriver/edge.rb
299
316
  - lib/selenium/webdriver/edge/driver.rb