selenium-webdriver 4.8.1 → 4.8.3
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 +15 -0
 - data/bin/linux/selenium-manager +0 -0
 - data/bin/macos/selenium-manager +0 -0
 - data/bin/windows/selenium-manager.exe +0 -0
 - data/lib/selenium/webdriver/chrome/driver.rb +3 -14
 - data/lib/selenium/webdriver/chrome/service.rb +0 -5
 - data/lib/selenium/webdriver/common/driver.rb +0 -18
 - data/lib/selenium/webdriver/common/driver_finder.rb +43 -0
 - data/lib/selenium/webdriver/common/local_driver.rb +55 -0
 - data/lib/selenium/webdriver/common/selenium_manager.rb +27 -8
 - data/lib/selenium/webdriver/common/service.rb +1 -20
 - data/lib/selenium/webdriver/common/service_manager.rb +1 -1
 - data/lib/selenium/webdriver/common.rb +2 -0
 - data/lib/selenium/webdriver/edge/driver.rb +3 -14
 - data/lib/selenium/webdriver/edge/service.rb +0 -4
 - data/lib/selenium/webdriver/firefox/driver.rb +3 -14
 - data/lib/selenium/webdriver/firefox/service.rb +0 -5
 - data/lib/selenium/webdriver/ie/driver.rb +3 -16
 - data/lib/selenium/webdriver/ie/service.rb +0 -5
 - data/lib/selenium/webdriver/remote/driver.rb +7 -3
 - data/lib/selenium/webdriver/safari/driver.rb +3 -16
 - data/lib/selenium/webdriver/safari/service.rb +0 -4
 - data/lib/selenium/webdriver/version.rb +1 -1
 - metadata +4 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: c644ddbe5035bb314db11fd26ac707eb3f9aab99175a50b78214b1cafa672808
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 3d037d5e8b6c07c61c484cd45e3065e9e755b6331bfadf9980be54c5c87f262e
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 6ed3ac91be70eef9a1e2626ae7d35dece432089a20e3714d79a38c4c1f5944159787f835f42c796df1f528debccd453ec89f8470c655d366b0ca6ea6e9351d11
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: a3e49d3f778ec7f26d9d3d5e322cbcf15ada0aa5a2a048efddea90bce06aa1db91996afcb1e077da6bec5d7183c8e61ffa36d785923b3daba518e07eb06052bd
         
     | 
    
        data/CHANGES
    CHANGED
    
    | 
         @@ -1,3 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            4.8.3 (2023-03-26)
         
     | 
| 
      
 2 
     | 
    
         
            +
            =========================
         
     | 
| 
      
 3 
     | 
    
         
            +
            Ruby:
         
     | 
| 
      
 4 
     | 
    
         
            +
              * Still need to use driver finder when using capabilities parameter
         
     | 
| 
      
 5 
     | 
    
         
            +
              * Accommodate Driver Finder being sent something other than an Options instance
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            4.8.2 (2023-03-24)
         
     | 
| 
      
 8 
     | 
    
         
            +
            =========================
         
     | 
| 
      
 9 
     | 
    
         
            +
            Ruby:
         
     | 
| 
      
 10 
     | 
    
         
            +
              * Ruby driver finder (#11523)
         
     | 
| 
      
 11 
     | 
    
         
            +
              * Using json output with Selenium Manager
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            BiDi:
         
     | 
| 
      
 14 
     | 
    
         
            +
              * Released selenium-devtools 0.111.0 (supports CDP v85, v109, v110, v111)
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       1 
16 
     | 
    
         
             
            4.8.1 (2023-02-17)
         
     | 
| 
       2 
17 
     | 
    
         
             
            =========================
         
     | 
| 
       3 
18 
     | 
    
         
             
            Ruby:
         
     | 
    
        data/bin/linux/selenium-manager
    CHANGED
    
    | 
         Binary file 
     | 
    
        data/bin/macos/selenium-manager
    CHANGED
    
    | 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         @@ -28,11 +28,10 @@ module Selenium 
     | 
|
| 
       28 
28 
     | 
    
         
             
                  #
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                  class Driver < Chromium::Driver
         
     | 
| 
       31 
     | 
    
         
            -
                     
     | 
| 
       32 
     | 
    
         
            -
                      raise ArgumentError, "Can't initialize #{self.class} with :url" if url
         
     | 
| 
      
 31 
     | 
    
         
            +
                    include LocalDriver
         
     | 
| 
       33 
32 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                      url =  
     | 
| 
      
 33 
     | 
    
         
            +
                    def initialize(capabilities: nil, options: nil, service: nil, url: nil, **opts)
         
     | 
| 
      
 34 
     | 
    
         
            +
                      caps, url = initialize_local_driver(capabilities, options, service, url)
         
     | 
| 
       36 
35 
     | 
    
         
             
                      super(caps: caps, url: url, **opts)
         
     | 
| 
       37 
36 
     | 
    
         
             
                    end
         
     | 
| 
       38 
37 
     | 
    
         | 
| 
         @@ -45,16 +44,6 @@ module Selenium 
     | 
|
| 
       45 
44 
     | 
    
         
             
                    def devtools_address
         
     | 
| 
       46 
45 
     | 
    
         
             
                      "http://#{capabilities['goog:chromeOptions']['debuggerAddress']}"
         
     | 
| 
       47 
46 
     | 
    
         
             
                    end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                    def process_options(options, capabilities)
         
     | 
| 
       50 
     | 
    
         
            -
                      if options && !options.is_a?(Options)
         
     | 
| 
       51 
     | 
    
         
            -
                        raise ArgumentError, ":options must be an instance of #{Options}"
         
     | 
| 
       52 
     | 
    
         
            -
                      elsif options.nil? && capabilities.nil?
         
     | 
| 
       53 
     | 
    
         
            -
                        options = Options.new
         
     | 
| 
       54 
     | 
    
         
            -
                      end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                      super(options, capabilities)
         
     | 
| 
       57 
     | 
    
         
            -
                    end
         
     | 
| 
       58 
47 
     | 
    
         
             
                  end # Driver
         
     | 
| 
       59 
48 
     | 
    
         
             
                end # Chrome
         
     | 
| 
       60 
49 
     | 
    
         
             
              end # WebDriver
         
     | 
| 
         @@ -25,11 +25,6 @@ module Selenium 
     | 
|
| 
       25 
25 
     | 
    
         
             
                  class Service < Chromium::Service
         
     | 
| 
       26 
26 
     | 
    
         
             
                    DEFAULT_PORT = 9515
         
     | 
| 
       27 
27 
     | 
    
         
             
                    EXECUTABLE = 'chromedriver'
         
     | 
| 
       28 
     | 
    
         
            -
                    MISSING_TEXT = <<~ERROR
         
     | 
| 
       29 
     | 
    
         
            -
                      Unable to find chromedriver. Please download the server from
         
     | 
| 
       30 
     | 
    
         
            -
                      https://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH.
         
     | 
| 
       31 
     | 
    
         
            -
                      More info at https://www.selenium.dev/documentation/webdriver/getting_started/install_drivers/?language=ruby.
         
     | 
| 
       32 
     | 
    
         
            -
                    ERROR
         
     | 
| 
       33 
28 
     | 
    
         
             
                    SHUTDOWN_SUPPORTED = true
         
     | 
| 
       34 
29 
     | 
    
         
             
                  end # Service
         
     | 
| 
       35 
30 
     | 
    
         
             
                end # Chrome
         
     | 
| 
         @@ -318,24 +318,6 @@ module Selenium 
     | 
|
| 
       318 
318 
     | 
    
         
             
                    end
         
     | 
| 
       319 
319 
     | 
    
         
             
                  end
         
     | 
| 
       320 
320 
     | 
    
         | 
| 
       321 
     | 
    
         
            -
                  def process_options(options, capabilities)
         
     | 
| 
       322 
     | 
    
         
            -
                    if options && capabilities
         
     | 
| 
       323 
     | 
    
         
            -
                      msg = "Don't use both :options and :capabilities when initializing #{self.class}, prefer :options"
         
     | 
| 
       324 
     | 
    
         
            -
                      raise ArgumentError, msg
         
     | 
| 
       325 
     | 
    
         
            -
                    end
         
     | 
| 
       326 
     | 
    
         
            -
             
     | 
| 
       327 
     | 
    
         
            -
                    options ? options.as_json : deprecate_capabilities(capabilities)
         
     | 
| 
       328 
     | 
    
         
            -
                  end
         
     | 
| 
       329 
     | 
    
         
            -
             
     | 
| 
       330 
     | 
    
         
            -
                  def deprecate_capabilities(capabilities)
         
     | 
| 
       331 
     | 
    
         
            -
                    unless is_a?(Remote::Driver)
         
     | 
| 
       332 
     | 
    
         
            -
                      WebDriver.logger.deprecate("The :capabilities parameter for #{self.class}",
         
     | 
| 
       333 
     | 
    
         
            -
                                                 ":options argument with an instance of #{self.class}",
         
     | 
| 
       334 
     | 
    
         
            -
                                                 id: :capabilities)
         
     | 
| 
       335 
     | 
    
         
            -
                    end
         
     | 
| 
       336 
     | 
    
         
            -
                    generate_capabilities(capabilities)
         
     | 
| 
       337 
     | 
    
         
            -
                  end
         
     | 
| 
       338 
     | 
    
         
            -
             
     | 
| 
       339 
321 
     | 
    
         
             
                  def generate_capabilities(capabilities)
         
     | 
| 
       340 
322 
     | 
    
         
             
                    Array(capabilities).map { |cap|
         
     | 
| 
       341 
323 
     | 
    
         
             
                      if cap.is_a? Symbol
         
     | 
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 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 DriverFinder
         
     | 
| 
      
 23 
     | 
    
         
            +
                  def self.path(options, klass)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    path = klass.driver_path
         
     | 
| 
      
 25 
     | 
    
         
            +
                    path = path.call if path.is_a?(Proc)
         
     | 
| 
      
 26 
     | 
    
         
            +
                    path ||= Platform.find_binary(klass::EXECUTABLE)
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    path ||= begin
         
     | 
| 
      
 29 
     | 
    
         
            +
                      SeleniumManager.driver_path(options)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    rescue StandardError => e
         
     | 
| 
      
 31 
     | 
    
         
            +
                      WebDriver.logger.debug("Unable obtain driver using Selenium Manager\n #{e.message}")
         
     | 
| 
      
 32 
     | 
    
         
            +
                      nil
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
                    msg = "Unable to locate the #{klass::EXECUTABLE} executable; for more information on how to install drivers, " \
         
     | 
| 
      
 35 
     | 
    
         
            +
                          'see https://www.selenium.dev/documentation/webdriver/getting_started/install_drivers/'
         
     | 
| 
      
 36 
     | 
    
         
            +
                    raise Error::WebDriverError, msg unless path
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    Platform.assert_executable path
         
     | 
| 
      
 39 
     | 
    
         
            +
                    path
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,55 @@ 
     | 
|
| 
      
 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 LocalDriver
         
     | 
| 
      
 23 
     | 
    
         
            +
                  def initialize_local_driver(capabilities, options, service, url)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    raise ArgumentError, "Can't initialize #{self.class} with :url" if url
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                    service ||= Service.send(browser)
         
     | 
| 
      
 27 
     | 
    
         
            +
                    caps = process_options(options, capabilities, service)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    url = service_url(service)
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                    [caps, url]
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  def process_options(options, capabilities, service)
         
     | 
| 
      
 34 
     | 
    
         
            +
                    default_options = Options.send(browser)
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                    if options && capabilities
         
     | 
| 
      
 37 
     | 
    
         
            +
                      msg = "Don't use both :options and :capabilities when initializing #{self.class}, prefer :options"
         
     | 
| 
      
 38 
     | 
    
         
            +
                      raise ArgumentError, msg
         
     | 
| 
      
 39 
     | 
    
         
            +
                    elsif options && !options.is_a?(default_options.class)
         
     | 
| 
      
 40 
     | 
    
         
            +
                      raise ArgumentError, ":options must be an instance of #{default_options.class}"
         
     | 
| 
      
 41 
     | 
    
         
            +
                    elsif capabilities
         
     | 
| 
      
 42 
     | 
    
         
            +
                      WebDriver.logger.deprecate("The :capabilities parameter for #{self.class}",
         
     | 
| 
      
 43 
     | 
    
         
            +
                                                 ":options argument with an instance of #{self.class}",
         
     | 
| 
      
 44 
     | 
    
         
            +
                                                 id: :capabilities)
         
     | 
| 
      
 45 
     | 
    
         
            +
                      service.executable_path ||= WebDriver::DriverFinder.path(capabilities, service.class)
         
     | 
| 
      
 46 
     | 
    
         
            +
                      generate_capabilities(capabilities)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    else
         
     | 
| 
      
 48 
     | 
    
         
            +
                      options ||= default_options
         
     | 
| 
      
 49 
     | 
    
         
            +
                      service.executable_path ||= WebDriver::DriverFinder.path(options, service.class)
         
     | 
| 
      
 50 
     | 
    
         
            +
                      options.as_json
         
     | 
| 
      
 51 
     | 
    
         
            +
                    end
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -30,15 +30,28 @@ module Selenium 
     | 
|
| 
       30 
30 
     | 
    
         
             
                  BIN_PATH = '../../../../../bin'
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
                  class << self
         
     | 
| 
       33 
     | 
    
         
            -
                    # @param [ 
     | 
| 
      
 33 
     | 
    
         
            +
                    # @param [Options] options browser options.
         
     | 
| 
       34 
34 
     | 
    
         
             
                    # @return [String] the path to the correct driver.
         
     | 
| 
       35 
     | 
    
         
            -
                    def driver_path( 
     | 
| 
       36 
     | 
    
         
            -
                       
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
      
 35 
     | 
    
         
            +
                    def driver_path(options)
         
     | 
| 
      
 36 
     | 
    
         
            +
                      message = 'applicable driver not found; attempting to install with Selenium Manager'
         
     | 
| 
      
 37 
     | 
    
         
            +
                      WebDriver.logger.warn(message)
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                      unless options.is_a?(Options)
         
     | 
| 
      
 40 
     | 
    
         
            +
                        raise ArgumentError, "SeleniumManager requires a WebDriver::Options instance, not #{options.inspect}"
         
     | 
| 
      
 41 
     | 
    
         
            +
                      end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                      command = [binary, '--browser', options.browser_name, '--output', 'json']
         
     | 
| 
      
 44 
     | 
    
         
            +
                      if options.browser_version
         
     | 
| 
      
 45 
     | 
    
         
            +
                        command << '--browser-version'
         
     | 
| 
      
 46 
     | 
    
         
            +
                        command << options.browser_version
         
     | 
| 
       39 
47 
     | 
    
         
             
                      end
         
     | 
| 
      
 48 
     | 
    
         
            +
                      if options.respond_to?(:binary) && !options.binary.nil?
         
     | 
| 
      
 49 
     | 
    
         
            +
                        command << '--browser-path'
         
     | 
| 
      
 50 
     | 
    
         
            +
                        command << "\"#{options.binary.gsub('\ ', ' ').gsub(' ', '\ ')}\""
         
     | 
| 
      
 51 
     | 
    
         
            +
                      end
         
     | 
| 
      
 52 
     | 
    
         
            +
                      command << '--debug' if WebDriver.logger.debug?
         
     | 
| 
       40 
53 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
                      location = run( 
     | 
| 
      
 54 
     | 
    
         
            +
                      location = run(command.join(' '))
         
     | 
| 
       42 
55 
     | 
    
         
             
                      WebDriver.logger.debug("Driver found at #{location}")
         
     | 
| 
       43 
56 
     | 
    
         
             
                      Platform.assert_executable location
         
     | 
| 
       44 
57 
     | 
    
         | 
| 
         @@ -73,15 +86,21 @@ module Selenium 
     | 
|
| 
       73 
86 
     | 
    
         | 
| 
       74 
87 
     | 
    
         
             
                      begin
         
     | 
| 
       75 
88 
     | 
    
         
             
                        stdout, stderr, status = Open3.capture3(command)
         
     | 
| 
      
 89 
     | 
    
         
            +
                        json_output = stdout.empty? ? nil : JSON.parse(stdout)
         
     | 
| 
      
 90 
     | 
    
         
            +
                        result = json_output&.dig('result', 'message')
         
     | 
| 
       76 
91 
     | 
    
         
             
                      rescue StandardError => e
         
     | 
| 
       77 
92 
     | 
    
         
             
                        raise Error::WebDriverError, "Unsuccessful command executed: #{command}", e.message
         
     | 
| 
       78 
93 
     | 
    
         
             
                      end
         
     | 
| 
       79 
94 
     | 
    
         | 
| 
       80 
95 
     | 
    
         
             
                      if status.exitstatus.positive?
         
     | 
| 
       81 
     | 
    
         
            -
                        raise Error::WebDriverError, "Unsuccessful command executed: #{command}\n#{ 
     | 
| 
      
 96 
     | 
    
         
            +
                        raise Error::WebDriverError, "Unsuccessful command executed: #{command}\n#{result}#{stderr}"
         
     | 
| 
      
 97 
     | 
    
         
            +
                      end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                      json_output['logs'].each do |log|
         
     | 
| 
      
 100 
     | 
    
         
            +
                        WebDriver.logger.send(log['level'].downcase, log['message'])
         
     | 
| 
       82 
101 
     | 
    
         
             
                      end
         
     | 
| 
       83 
102 
     | 
    
         | 
| 
       84 
     | 
    
         
            -
                       
     | 
| 
      
 103 
     | 
    
         
            +
                      result
         
     | 
| 
       85 
104 
     | 
    
         
             
                    end
         
     | 
| 
       86 
105 
     | 
    
         
             
                  end
         
     | 
| 
       87 
106 
     | 
    
         
             
                end # SeleniumManager
         
     | 
| 
         @@ -67,11 +67,10 @@ module Selenium 
     | 
|
| 
       67 
67 
     | 
    
         
             
                  #
         
     | 
| 
       68 
68 
     | 
    
         | 
| 
       69 
69 
     | 
    
         
             
                  def initialize(path: nil, port: nil, args: nil)
         
     | 
| 
       70 
     | 
    
         
            -
                    path ||= self.class.driver_path
         
     | 
| 
       71 
70 
     | 
    
         
             
                    port ||= self.class::DEFAULT_PORT
         
     | 
| 
       72 
71 
     | 
    
         
             
                    args ||= []
         
     | 
| 
       73 
72 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
                    @executable_path =  
     | 
| 
      
 73 
     | 
    
         
            +
                    @executable_path = path
         
     | 
| 
       75 
74 
     | 
    
         
             
                    @host = Platform.localhost
         
     | 
| 
       76 
75 
     | 
    
         
             
                    @port = Integer(port)
         
     | 
| 
       77 
76 
     | 
    
         | 
| 
         @@ -96,24 +95,6 @@ module Selenium 
     | 
|
| 
       96 
95 
     | 
    
         
             
                                               id: :driver_opts)
         
     | 
| 
       97 
96 
     | 
    
         
             
                    driver_opts.key?(:args) ? driver_opts.delete(:args) : []
         
     | 
| 
       98 
97 
     | 
    
         
             
                  end
         
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
                  private
         
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
                  def binary_path(path = nil)
         
     | 
| 
       103 
     | 
    
         
            -
                    path = path.call if path.is_a?(Proc)
         
     | 
| 
       104 
     | 
    
         
            -
                    path ||= Platform.find_binary(self.class::EXECUTABLE)
         
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
                    begin
         
     | 
| 
       107 
     | 
    
         
            -
                      path ||= SeleniumManager.driver_path(self.class::EXECUTABLE)
         
     | 
| 
       108 
     | 
    
         
            -
                    rescue Error::WebDriverError => e
         
     | 
| 
       109 
     | 
    
         
            -
                      WebDriver.logger.debug("Unable obtain driver using Selenium Manager\n #{e.message}")
         
     | 
| 
       110 
     | 
    
         
            -
                    end
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
                    raise Error::WebDriverError, self.class::MISSING_TEXT unless path
         
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                    Platform.assert_executable path
         
     | 
| 
       115 
     | 
    
         
            -
                    path
         
     | 
| 
       116 
     | 
    
         
            -
                  end
         
     | 
| 
       117 
98 
     | 
    
         
             
                end # Service
         
     | 
| 
       118 
99 
     | 
    
         
             
              end # WebDriver
         
     | 
| 
       119 
100 
     | 
    
         
             
            end # Selenium
         
     | 
| 
         @@ -18,6 +18,8 @@ 
     | 
|
| 
       18 
18 
     | 
    
         
             
            # under the License.
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
            require 'selenium/webdriver/common/error'
         
     | 
| 
      
 21 
     | 
    
         
            +
            require 'selenium/webdriver/common/local_driver'
         
     | 
| 
      
 22 
     | 
    
         
            +
            require 'selenium/webdriver/common/driver_finder'
         
     | 
| 
       21 
23 
     | 
    
         
             
            require 'selenium/webdriver/common/platform'
         
     | 
| 
       22 
24 
     | 
    
         
             
            require 'selenium/webdriver/common/proxy'
         
     | 
| 
       23 
25 
     | 
    
         
             
            require 'selenium/webdriver/common/log_entry'
         
     | 
| 
         @@ -28,11 +28,10 @@ module Selenium 
     | 
|
| 
       28 
28 
     | 
    
         
             
                  #
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                  class Driver < Chromium::Driver
         
     | 
| 
       31 
     | 
    
         
            -
                     
     | 
| 
       32 
     | 
    
         
            -
                      raise ArgumentError, "Can't initialize #{self.class} with :url" if url
         
     | 
| 
      
 31 
     | 
    
         
            +
                    include LocalDriver
         
     | 
| 
       33 
32 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                      url =  
     | 
| 
      
 33 
     | 
    
         
            +
                    def initialize(capabilities: nil, options: nil, service: nil, url: nil, **opts)
         
     | 
| 
      
 34 
     | 
    
         
            +
                      caps, url = initialize_local_driver(capabilities, options, service, url)
         
     | 
| 
       36 
35 
     | 
    
         
             
                      super(caps: caps, url: url, **opts)
         
     | 
| 
       37 
36 
     | 
    
         
             
                    end
         
     | 
| 
       38 
37 
     | 
    
         | 
| 
         @@ -45,16 +44,6 @@ module Selenium 
     | 
|
| 
       45 
44 
     | 
    
         
             
                    def devtools_address
         
     | 
| 
       46 
45 
     | 
    
         
             
                      "http://#{capabilities['ms:edgeOptions']['debuggerAddress']}"
         
     | 
| 
       47 
46 
     | 
    
         
             
                    end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                    def process_options(options, capabilities)
         
     | 
| 
       50 
     | 
    
         
            -
                      if options && !options.is_a?(Options)
         
     | 
| 
       51 
     | 
    
         
            -
                        raise ArgumentError, ":options must be an instance of #{Options}"
         
     | 
| 
       52 
     | 
    
         
            -
                      elsif options.nil? && capabilities.nil?
         
     | 
| 
       53 
     | 
    
         
            -
                        options = Options.new
         
     | 
| 
       54 
     | 
    
         
            -
                      end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                      super(options, capabilities)
         
     | 
| 
       57 
     | 
    
         
            -
                    end
         
     | 
| 
       58 
47 
     | 
    
         
             
                  end # Driver
         
     | 
| 
       59 
48 
     | 
    
         
             
                end # Edge
         
     | 
| 
       60 
49 
     | 
    
         
             
              end # WebDriver
         
     | 
| 
         @@ -25,10 +25,6 @@ module Selenium 
     | 
|
| 
       25 
25 
     | 
    
         
             
                  class Service < Chromium::Service
         
     | 
| 
       26 
26 
     | 
    
         
             
                    DEFAULT_PORT = 9515
         
     | 
| 
       27 
27 
     | 
    
         
             
                    EXECUTABLE = 'msedgedriver'
         
     | 
| 
       28 
     | 
    
         
            -
                    MISSING_TEXT = <<~ERROR
         
     | 
| 
       29 
     | 
    
         
            -
                      Unable to find msedgedriver. Please download the server from
         
     | 
| 
       30 
     | 
    
         
            -
                      https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ and place it somewhere on your PATH.
         
     | 
| 
       31 
     | 
    
         
            -
                    ERROR
         
     | 
| 
       32 
28 
     | 
    
         
             
                    SHUTDOWN_SUPPORTED = true
         
     | 
| 
       33 
29 
     | 
    
         
             
                  end # Service
         
     | 
| 
       34 
30 
     | 
    
         
             
                end # Edge
         
     | 
| 
         @@ -36,11 +36,10 @@ module Selenium 
     | 
|
| 
       36 
36 
     | 
    
         
             
                                  DriverExtensions::HasWebStorage,
         
     | 
| 
       37 
37 
     | 
    
         
             
                                  DriverExtensions::PrintsPage].freeze
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
                     
     | 
| 
       40 
     | 
    
         
            -
                      raise ArgumentError, "Can't initialize #{self.class} with :url" if url
         
     | 
| 
      
 39 
     | 
    
         
            +
                    include LocalDriver
         
     | 
| 
       41 
40 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                      url =  
     | 
| 
      
 41 
     | 
    
         
            +
                    def initialize(capabilities: nil, options: nil, service: nil, url: nil, **opts)
         
     | 
| 
      
 42 
     | 
    
         
            +
                      caps, url = initialize_local_driver(capabilities, options, service, url)
         
     | 
| 
       44 
43 
     | 
    
         
             
                      super(caps: caps, url: url, **opts)
         
     | 
| 
       45 
44 
     | 
    
         
             
                    end
         
     | 
| 
       46 
45 
     | 
    
         | 
| 
         @@ -64,16 +63,6 @@ module Selenium 
     | 
|
| 
       64 
63 
     | 
    
         
             
                    def devtools_version
         
     | 
| 
       65 
64 
     | 
    
         
             
                      Firefox::DEVTOOLS_VERSION
         
     | 
| 
       66 
65 
     | 
    
         
             
                    end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                    def process_options(options, capabilities)
         
     | 
| 
       69 
     | 
    
         
            -
                      if options && !options.is_a?(Options)
         
     | 
| 
       70 
     | 
    
         
            -
                        raise ArgumentError, ":options must be an instance of #{Options}"
         
     | 
| 
       71 
     | 
    
         
            -
                      elsif options.nil? && capabilities.nil?
         
     | 
| 
       72 
     | 
    
         
            -
                        options = Options.new
         
     | 
| 
       73 
     | 
    
         
            -
                      end
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
                      super(options, capabilities)
         
     | 
| 
       76 
     | 
    
         
            -
                    end
         
     | 
| 
       77 
66 
     | 
    
         
             
                  end # Driver
         
     | 
| 
       78 
67 
     | 
    
         
             
                end # Firefox
         
     | 
| 
       79 
68 
     | 
    
         
             
              end # WebDriver
         
     | 
| 
         @@ -23,11 +23,6 @@ module Selenium 
     | 
|
| 
       23 
23 
     | 
    
         
             
                  class Service < WebDriver::Service
         
     | 
| 
       24 
24 
     | 
    
         
             
                    DEFAULT_PORT = 4444
         
     | 
| 
       25 
25 
     | 
    
         
             
                    EXECUTABLE = 'geckodriver'
         
     | 
| 
       26 
     | 
    
         
            -
                    MISSING_TEXT = <<~ERROR
         
     | 
| 
       27 
     | 
    
         
            -
                      Unable to find Mozilla geckodriver. Please download the server from
         
     | 
| 
       28 
     | 
    
         
            -
                      https://github.com/mozilla/geckodriver/releases and place it somewhere on your PATH.
         
     | 
| 
       29 
     | 
    
         
            -
                      More info at https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver.
         
     | 
| 
       30 
     | 
    
         
            -
                    ERROR
         
     | 
| 
       31 
26 
     | 
    
         
             
                    SHUTDOWN_SUPPORTED = false
         
     | 
| 
       32 
27 
     | 
    
         | 
| 
       33 
28 
     | 
    
         
             
                    private
         
     | 
| 
         @@ -29,29 +29,16 @@ module Selenium 
     | 
|
| 
       29 
29 
     | 
    
         
             
                  class Driver < WebDriver::Driver
         
     | 
| 
       30 
30 
     | 
    
         
             
                    EXTENSIONS = [DriverExtensions::HasWebStorage].freeze
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
                     
     | 
| 
       33 
     | 
    
         
            -
                      raise ArgumentError, "Can't initialize #{self.class} with :url" if url
         
     | 
| 
      
 32 
     | 
    
         
            +
                    include LocalDriver
         
     | 
| 
       34 
33 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                      url =  
     | 
| 
      
 34 
     | 
    
         
            +
                    def initialize(capabilities: nil, options: nil, service: nil, url: nil, **opts)
         
     | 
| 
      
 35 
     | 
    
         
            +
                      caps, url = initialize_local_driver(capabilities, options, service, url)
         
     | 
| 
       37 
36 
     | 
    
         
             
                      super(caps: caps, url: url, **opts)
         
     | 
| 
       38 
37 
     | 
    
         
             
                    end
         
     | 
| 
       39 
38 
     | 
    
         | 
| 
       40 
39 
     | 
    
         
             
                    def browser
         
     | 
| 
       41 
40 
     | 
    
         
             
                      :internet_explorer
         
     | 
| 
       42 
41 
     | 
    
         
             
                    end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                    private
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                    def process_options(options, capabilities)
         
     | 
| 
       47 
     | 
    
         
            -
                      if options && !options.is_a?(Options)
         
     | 
| 
       48 
     | 
    
         
            -
                        raise ArgumentError, ":options must be an instance of #{Options}"
         
     | 
| 
       49 
     | 
    
         
            -
                      elsif options.nil? && capabilities.nil?
         
     | 
| 
       50 
     | 
    
         
            -
                        options = Options.new
         
     | 
| 
       51 
     | 
    
         
            -
                      end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                      super(options, capabilities)
         
     | 
| 
       54 
     | 
    
         
            -
                    end
         
     | 
| 
       55 
42 
     | 
    
         
             
                  end # Driver
         
     | 
| 
       56 
43 
     | 
    
         
             
                end # IE
         
     | 
| 
       57 
44 
     | 
    
         
             
              end # WebDriver
         
     | 
| 
         @@ -23,11 +23,6 @@ module Selenium 
     | 
|
| 
       23 
23 
     | 
    
         
             
                  class Service < WebDriver::Service
         
     | 
| 
       24 
24 
     | 
    
         
             
                    DEFAULT_PORT = 5555
         
     | 
| 
       25 
25 
     | 
    
         
             
                    EXECUTABLE = 'IEDriverServer'
         
     | 
| 
       26 
     | 
    
         
            -
                    MISSING_TEXT = <<~ERROR
         
     | 
| 
       27 
     | 
    
         
            -
                      Unable to find IEDriverServer. Please download the server from
         
     | 
| 
       28 
     | 
    
         
            -
                      https://www.selenium.dev/downloads/ and place it somewhere on your PATH.
         
     | 
| 
       29 
     | 
    
         
            -
                      More info at https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver.
         
     | 
| 
       30 
     | 
    
         
            -
                    ERROR
         
     | 
| 
       31 
26 
     | 
    
         
             
                    SHUTDOWN_SUPPORTED = true
         
     | 
| 
       32 
27 
     | 
    
         | 
| 
       33 
28 
     | 
    
         
             
                    private
         
     | 
| 
         @@ -50,9 +50,13 @@ module Selenium 
     | 
|
| 
       50 
50 
     | 
    
         
             
                    end
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
52 
     | 
    
         
             
                    def process_options(options, capabilities)
         
     | 
| 
       53 
     | 
    
         
            -
                       
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
      
 53 
     | 
    
         
            +
                      if options && capabilities
         
     | 
| 
      
 54 
     | 
    
         
            +
                        msg = "Don't use both :options and :capabilities when initializing #{self.class}, prefer :options"
         
     | 
| 
      
 55 
     | 
    
         
            +
                        raise ArgumentError, msg
         
     | 
| 
      
 56 
     | 
    
         
            +
                      elsif options.nil? && capabilities.nil?
         
     | 
| 
      
 57 
     | 
    
         
            +
                        raise ArgumentError, "#{self.class} needs :options to be set"
         
     | 
| 
      
 58 
     | 
    
         
            +
                      end
         
     | 
| 
      
 59 
     | 
    
         
            +
                      options ? options.as_json : generate_capabilities(capabilities)
         
     | 
| 
       56 
60 
     | 
    
         
             
                    end
         
     | 
| 
       57 
61 
     | 
    
         
             
                  end # Driver
         
     | 
| 
       58 
62 
     | 
    
         
             
                end # Remote
         
     | 
| 
         @@ -30,29 +30,16 @@ module Selenium 
     | 
|
| 
       30 
30 
     | 
    
         
             
                                  DriverExtensions::HasApplePermissions,
         
     | 
| 
       31 
31 
     | 
    
         
             
                                  DriverExtensions::HasWebStorage].freeze
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                     
     | 
| 
       34 
     | 
    
         
            -
                      raise ArgumentError, "Can't initialize #{self.class} with :url" if url
         
     | 
| 
      
 33 
     | 
    
         
            +
                    include LocalDriver
         
     | 
| 
       35 
34 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                      url =  
     | 
| 
      
 35 
     | 
    
         
            +
                    def initialize(capabilities: nil, options: nil, service: nil, url: nil, **opts)
         
     | 
| 
      
 36 
     | 
    
         
            +
                      caps, url = initialize_local_driver(capabilities, options, service, url)
         
     | 
| 
       38 
37 
     | 
    
         
             
                      super(caps: caps, url: url, **opts)
         
     | 
| 
       39 
38 
     | 
    
         
             
                    end
         
     | 
| 
       40 
39 
     | 
    
         | 
| 
       41 
40 
     | 
    
         
             
                    def browser
         
     | 
| 
       42 
41 
     | 
    
         
             
                      :safari
         
     | 
| 
       43 
42 
     | 
    
         
             
                    end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                    private
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                    def process_options(options, capabilities)
         
     | 
| 
       48 
     | 
    
         
            -
                      if options && !options.is_a?(Options)
         
     | 
| 
       49 
     | 
    
         
            -
                        raise ArgumentError, ":options must be an instance of #{Options}"
         
     | 
| 
       50 
     | 
    
         
            -
                      elsif options.nil? && capabilities.nil?
         
     | 
| 
       51 
     | 
    
         
            -
                        options = Options.new
         
     | 
| 
       52 
     | 
    
         
            -
                      end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                      super(options, capabilities)
         
     | 
| 
       55 
     | 
    
         
            -
                    end
         
     | 
| 
       56 
43 
     | 
    
         
             
                  end # Driver
         
     | 
| 
       57 
44 
     | 
    
         
             
                end # Safari
         
     | 
| 
       58 
45 
     | 
    
         
             
              end # WebDriver
         
     | 
| 
         @@ -23,10 +23,6 @@ module Selenium 
     | 
|
| 
       23 
23 
     | 
    
         
             
                  class Service < WebDriver::Service
         
     | 
| 
       24 
24 
     | 
    
         
             
                    DEFAULT_PORT = 7050
         
     | 
| 
       25 
25 
     | 
    
         
             
                    EXECUTABLE = 'safaridriver'
         
     | 
| 
       26 
     | 
    
         
            -
                    MISSING_TEXT = <<~ERROR
         
     | 
| 
       27 
     | 
    
         
            -
                      Unable to find Apple's safaridriver which comes with Safari 10.
         
     | 
| 
       28 
     | 
    
         
            -
                      More info at https://webkit.org/blog/6900/webdriver-support-in-safari-10/
         
     | 
| 
       29 
     | 
    
         
            -
                    ERROR
         
     | 
| 
       30 
26 
     | 
    
         
             
                    SHUTDOWN_SUPPORTED = false
         
     | 
| 
       31 
27 
     | 
    
         
             
                  end # Service
         
     | 
| 
       32 
28 
     | 
    
         
             
                end # Safari
         
     | 
    
        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.8. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 4.8.3
         
     | 
| 
       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: 2023- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2023-03-27 00:00:00.000000000 Z
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies:
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       16 
16 
     | 
    
         
             
              name: rexml
         
     | 
| 
         @@ -272,6 +272,7 @@ files: 
     | 
|
| 
       272 
272 
     | 
    
         
             
            - lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb
         
     | 
| 
       273 
273 
     | 
    
         
             
            - lib/selenium/webdriver/common/driver_extensions/prints_page.rb
         
     | 
| 
       274 
274 
     | 
    
         
             
            - lib/selenium/webdriver/common/driver_extensions/uploads_files.rb
         
     | 
| 
      
 275 
     | 
    
         
            +
            - lib/selenium/webdriver/common/driver_finder.rb
         
     | 
| 
       275 
276 
     | 
    
         
             
            - lib/selenium/webdriver/common/element.rb
         
     | 
| 
       276 
277 
     | 
    
         
             
            - lib/selenium/webdriver/common/error.rb
         
     | 
| 
       277 
278 
     | 
    
         
             
            - lib/selenium/webdriver/common/file_reaper.rb
         
     | 
| 
         @@ -297,6 +298,7 @@ files: 
     | 
|
| 
       297 
298 
     | 
    
         
             
            - lib/selenium/webdriver/common/interactions/wheel_actions.rb
         
     | 
| 
       298 
299 
     | 
    
         
             
            - lib/selenium/webdriver/common/interactions/wheel_input.rb
         
     | 
| 
       299 
300 
     | 
    
         
             
            - lib/selenium/webdriver/common/keys.rb
         
     | 
| 
      
 301 
     | 
    
         
            +
            - lib/selenium/webdriver/common/local_driver.rb
         
     | 
| 
       300 
302 
     | 
    
         
             
            - lib/selenium/webdriver/common/log_entry.rb
         
     | 
| 
       301 
303 
     | 
    
         
             
            - lib/selenium/webdriver/common/logger.rb
         
     | 
| 
       302 
304 
     | 
    
         
             
            - lib/selenium/webdriver/common/logs.rb
         
     |