selenium-webdriver 4.0.0.alpha1 → 4.0.0.alpha2
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 +8 -1
- data/lib/selenium/webdriver/version.rb +1 -1
- metadata +2 -26
- data/lib/selenium/webdriver/common/bridge_helper.rb +0 -82
- data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +0 -36
- data/lib/selenium/webdriver/common/keyboard.rb +0 -70
- data/lib/selenium/webdriver/common/mouse.rb +0 -89
- data/lib/selenium/webdriver/common/options.rb +0 -177
- data/lib/selenium/webdriver/common/touch_action_builder.rb +0 -78
- data/lib/selenium/webdriver/common/touch_screen.rb +0 -123
- data/lib/selenium/webdriver/common/w3c_action_builder.rb +0 -212
- data/lib/selenium/webdriver/common/w3c_manager.rb +0 -45
- data/lib/selenium/webdriver/common/w3c_options.rb +0 -45
- data/lib/selenium/webdriver/edge/bridge.rb +0 -76
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/lib/selenium/webdriver/firefox/launcher.rb +0 -111
- data/lib/selenium/webdriver/firefox/legacy/driver.rb +0 -83
- data/lib/selenium/webdriver/firefox/marionette/bridge.rb +0 -49
- data/lib/selenium/webdriver/firefox/marionette/driver.rb +0 -90
- data/lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so +0 -0
- data/lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so +0 -0
- data/lib/selenium/webdriver/firefox/util.rb +0 -46
- data/lib/selenium/webdriver/remote/oss/bridge.rb +0 -594
- data/lib/selenium/webdriver/remote/oss/commands.rb +0 -223
- data/lib/selenium/webdriver/remote/w3c/bridge.rb +0 -605
- data/lib/selenium/webdriver/remote/w3c/capabilities.rb +0 -310
- data/lib/selenium/webdriver/remote/w3c/commands.rb +0 -157
| @@ -1,310 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            # Licensed to the Software Freedom Conservancy (SFC) under one
         | 
| 4 | 
            -
            # or more contributor license agreements.  See the NOTICE file
         | 
| 5 | 
            -
            # distributed with this work for additional information
         | 
| 6 | 
            -
            # regarding copyright ownership.  The SFC licenses this file
         | 
| 7 | 
            -
            # to you under the Apache License, Version 2.0 (the
         | 
| 8 | 
            -
            # "License"); you may not use this file except in compliance
         | 
| 9 | 
            -
            # with the License.  You may obtain a copy of the License at
         | 
| 10 | 
            -
            #
         | 
| 11 | 
            -
            #   http://www.apache.org/licenses/LICENSE-2.0
         | 
| 12 | 
            -
            #
         | 
| 13 | 
            -
            # Unless required by applicable law or agreed to in writing,
         | 
| 14 | 
            -
            # software distributed under the License is distributed on an
         | 
| 15 | 
            -
            # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
         | 
| 16 | 
            -
            # KIND, either express or implied.  See the License for the
         | 
| 17 | 
            -
            # specific language governing permissions and limitations
         | 
| 18 | 
            -
            # under the License.
         | 
| 19 | 
            -
             | 
| 20 | 
            -
            module Selenium
         | 
| 21 | 
            -
              module WebDriver
         | 
| 22 | 
            -
                module Remote
         | 
| 23 | 
            -
                  module W3C
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                    #
         | 
| 26 | 
            -
                    # Specification of the desired and/or actual capabilities of the browser that the
         | 
| 27 | 
            -
                    # server is being asked to create.
         | 
| 28 | 
            -
                    #
         | 
| 29 | 
            -
                    # @api private
         | 
| 30 | 
            -
                    #
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                    class Capabilities
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                      EXTENSION_CAPABILITY_PATTERN = /\A[\w-]+:.*\z/.freeze
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                      KNOWN = [
         | 
| 37 | 
            -
                        :browser_name,
         | 
| 38 | 
            -
                        :browser_version,
         | 
| 39 | 
            -
                        :platform_name,
         | 
| 40 | 
            -
                        :accept_insecure_certs,
         | 
| 41 | 
            -
                        :page_load_strategy,
         | 
| 42 | 
            -
                        :proxy,
         | 
| 43 | 
            -
                        :set_window_rect,
         | 
| 44 | 
            -
                        :timeouts,
         | 
| 45 | 
            -
                        :unhandled_prompt_behavior,
         | 
| 46 | 
            -
                        :strict_file_interactability,
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                        # remote-specific
         | 
| 49 | 
            -
                        :remote_session_id,
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                        # TODO: (alex) deprecate in favor of Firefox::Options?
         | 
| 52 | 
            -
                        :accessibility_checks,
         | 
| 53 | 
            -
                        :device,
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                        # TODO: (alex) deprecate compatibility with OSS-capabilities
         | 
| 56 | 
            -
                        :implicit_timeout,
         | 
| 57 | 
            -
                        :page_load_timeout,
         | 
| 58 | 
            -
                        :script_timeout
         | 
| 59 | 
            -
                      ].freeze
         | 
| 60 | 
            -
             | 
| 61 | 
            -
                      KNOWN.each do |key|
         | 
| 62 | 
            -
                        define_method key do
         | 
| 63 | 
            -
                          @capabilities.fetch(key)
         | 
| 64 | 
            -
                        end
         | 
| 65 | 
            -
             | 
| 66 | 
            -
                        next if key == :proxy
         | 
| 67 | 
            -
             | 
| 68 | 
            -
                        define_method "#{key}=" do |value|
         | 
| 69 | 
            -
                          case key
         | 
| 70 | 
            -
                          when :accessibility_checks
         | 
| 71 | 
            -
                            WebDriver.logger.deprecate(":accessibility_checks capability")
         | 
| 72 | 
            -
                          when :device
         | 
| 73 | 
            -
                            WebDriver.logger.deprecate(":device capability")
         | 
| 74 | 
            -
                          end
         | 
| 75 | 
            -
                          @capabilities[key] = value
         | 
| 76 | 
            -
                        end
         | 
| 77 | 
            -
                      end
         | 
| 78 | 
            -
             | 
| 79 | 
            -
                      #
         | 
| 80 | 
            -
                      # Backward compatibility
         | 
| 81 | 
            -
                      #
         | 
| 82 | 
            -
             | 
| 83 | 
            -
                      alias_method :version, :browser_version
         | 
| 84 | 
            -
                      alias_method :version=, :browser_version=
         | 
| 85 | 
            -
                      alias_method :platform, :platform_name
         | 
| 86 | 
            -
                      alias_method :platform=, :platform_name=
         | 
| 87 | 
            -
             | 
| 88 | 
            -
                      #
         | 
| 89 | 
            -
                      # Convenience methods for the common choices.
         | 
| 90 | 
            -
                      #
         | 
| 91 | 
            -
             | 
| 92 | 
            -
                      class << self
         | 
| 93 | 
            -
                        def edge(opts = {})
         | 
| 94 | 
            -
                          WebDriver.logger.deprecate('Selenium::WebDriver::Remote::W3C::Capabilities.edge',
         | 
| 95 | 
            -
                                                     'Selenium::WebDriver::Remote::Capabilities.edge')
         | 
| 96 | 
            -
                          Remote::Capabilities.edge(opts)
         | 
| 97 | 
            -
                        end
         | 
| 98 | 
            -
             | 
| 99 | 
            -
                        def firefox(opts = {})
         | 
| 100 | 
            -
                          WebDriver.logger.deprecate('Selenium::WebDriver::Remote::W3C::Capabilities.firefox',
         | 
| 101 | 
            -
                                                     'Selenium::WebDriver::Remote::Capabilities.firefox')
         | 
| 102 | 
            -
                          Remote::Capabilities.firefox(opts)
         | 
| 103 | 
            -
                        end
         | 
| 104 | 
            -
             | 
| 105 | 
            -
                        alias_method :ff, :firefox
         | 
| 106 | 
            -
             | 
| 107 | 
            -
                        #
         | 
| 108 | 
            -
                        # @api private
         | 
| 109 | 
            -
                        #
         | 
| 110 | 
            -
             | 
| 111 | 
            -
                        def json_create(data)
         | 
| 112 | 
            -
                          data = data.dup
         | 
| 113 | 
            -
             | 
| 114 | 
            -
                          caps = new
         | 
| 115 | 
            -
                          caps.browser_name = data.delete('browserName')
         | 
| 116 | 
            -
                          caps.browser_version = data.delete('browserVersion')
         | 
| 117 | 
            -
                          caps.platform_name = data.delete('platformName')
         | 
| 118 | 
            -
                          caps.accept_insecure_certs = data.delete('acceptInsecureCerts') if data.key?('acceptInsecureCerts')
         | 
| 119 | 
            -
                          caps.page_load_strategy = data.delete('pageLoadStrategy')
         | 
| 120 | 
            -
                          timeouts = data.delete('timeouts')
         | 
| 121 | 
            -
                          caps.implicit_timeout = timeouts['implicit'] if timeouts
         | 
| 122 | 
            -
                          caps.page_load_timeout = timeouts['pageLoad'] if timeouts
         | 
| 123 | 
            -
                          caps.script_timeout = timeouts['script'] if timeouts
         | 
| 124 | 
            -
             | 
| 125 | 
            -
                          proxy = data.delete('proxy')
         | 
| 126 | 
            -
                          caps.proxy = Proxy.json_create(proxy) unless proxy.nil? || proxy.empty?
         | 
| 127 | 
            -
             | 
| 128 | 
            -
                          # Remote Server Specific
         | 
| 129 | 
            -
                          caps[:remote_session_id] = data.delete('webdriver.remote.sessionid')
         | 
| 130 | 
            -
             | 
| 131 | 
            -
                          # Marionette Specific
         | 
| 132 | 
            -
                          caps[:accessibility_checks] = data.delete('moz:accessibilityChecks')
         | 
| 133 | 
            -
                          caps[:profile] = data.delete('moz:profile')
         | 
| 134 | 
            -
                          caps[:rotatable] = data.delete('rotatable')
         | 
| 135 | 
            -
                          caps[:device] = data.delete('device')
         | 
| 136 | 
            -
             | 
| 137 | 
            -
                          # any remaining pairs will be added as is, with no conversion
         | 
| 138 | 
            -
                          caps.merge!(data)
         | 
| 139 | 
            -
             | 
| 140 | 
            -
                          caps
         | 
| 141 | 
            -
                        end
         | 
| 142 | 
            -
             | 
| 143 | 
            -
                        #
         | 
| 144 | 
            -
                        # Creates W3C compliant capabilities from OSS ones.
         | 
| 145 | 
            -
                        # @param oss_capabilities [Hash, Remote::Capabilities]
         | 
| 146 | 
            -
                        #
         | 
| 147 | 
            -
             | 
| 148 | 
            -
                        def from_oss(oss_capabilities) # rubocop:disable Metrics/MethodLength
         | 
| 149 | 
            -
                          w3c_capabilities = new
         | 
| 150 | 
            -
             | 
| 151 | 
            -
                          # TODO: (alex) make capabilities enumerable?
         | 
| 152 | 
            -
                          oss_capabilities = oss_capabilities.__send__(:capabilities) unless oss_capabilities.is_a?(Hash)
         | 
| 153 | 
            -
                          oss_capabilities.each do |name, value|
         | 
| 154 | 
            -
                            next if value.nil?
         | 
| 155 | 
            -
                            next if value.is_a?(String) && value.empty?
         | 
| 156 | 
            -
             | 
| 157 | 
            -
                            capability_name = name.to_s
         | 
| 158 | 
            -
             | 
| 159 | 
            -
                            snake_cased_capability_names = KNOWN.map(&:to_s)
         | 
| 160 | 
            -
                            camel_cased_capability_names = snake_cased_capability_names.map(&w3c_capabilities.method(:camel_case))
         | 
| 161 | 
            -
             | 
| 162 | 
            -
                            next unless snake_cased_capability_names.include?(capability_name) ||
         | 
| 163 | 
            -
                                        camel_cased_capability_names.include?(capability_name) ||
         | 
| 164 | 
            -
                                        capability_name.match(EXTENSION_CAPABILITY_PATTERN)
         | 
| 165 | 
            -
             | 
| 166 | 
            -
                            w3c_capabilities[name] = value
         | 
| 167 | 
            -
                          end
         | 
| 168 | 
            -
             | 
| 169 | 
            -
                          # User can pass :firefox_options or :firefox_profile.
         | 
| 170 | 
            -
                          #
         | 
| 171 | 
            -
                          # TODO: (alex) Refactor this whole method into converter class.
         | 
| 172 | 
            -
                          firefox_options = oss_capabilities['firefoxOptions'] || oss_capabilities['firefox_options'] || oss_capabilities[:firefox_options]
         | 
| 173 | 
            -
                          firefox_profile = oss_capabilities['firefox_profile'] || oss_capabilities[:firefox_profile]
         | 
| 174 | 
            -
                          firefox_binary  = oss_capabilities['firefox_binary'] || oss_capabilities[:firefox_binary]
         | 
| 175 | 
            -
             | 
| 176 | 
            -
                          if firefox_options
         | 
| 177 | 
            -
                            WebDriver.logger.deprecate(':firefox_options capabilitiy', 'Selenium::WebDriver::Firefox::Options')
         | 
| 178 | 
            -
                          end
         | 
| 179 | 
            -
             | 
| 180 | 
            -
                          if firefox_profile
         | 
| 181 | 
            -
                            WebDriver.logger.deprecate(':firefox_profile capabilitiy', 'Selenium::WebDriver::Firefox::Options#profile')
         | 
| 182 | 
            -
                          end
         | 
| 183 | 
            -
             | 
| 184 | 
            -
                          if firefox_binary
         | 
| 185 | 
            -
                            WebDriver.logger.deprecate(':firefox_binary capabilitiy', 'Selenium::WebDriver::Firefox::Options#binary')
         | 
| 186 | 
            -
                          end
         | 
| 187 | 
            -
             | 
| 188 | 
            -
                          if firefox_profile && firefox_options
         | 
| 189 | 
            -
                            second_profile = firefox_options['profile'] || firefox_options[:profile]
         | 
| 190 | 
            -
                            if second_profile && firefox_profile != second_profile
         | 
| 191 | 
            -
                              raise Error::WebDriverError, 'You cannot pass 2 different Firefox profiles'
         | 
| 192 | 
            -
                            end
         | 
| 193 | 
            -
                          end
         | 
| 194 | 
            -
             | 
| 195 | 
            -
                          if firefox_options || firefox_profile || firefox_binary
         | 
| 196 | 
            -
                            options = WebDriver::Firefox::Options.new(firefox_options || {})
         | 
| 197 | 
            -
                            options.binary = firefox_binary if firefox_binary
         | 
| 198 | 
            -
                            options.profile = firefox_profile if firefox_profile
         | 
| 199 | 
            -
                            w3c_capabilities.merge!(options.as_json)
         | 
| 200 | 
            -
                          end
         | 
| 201 | 
            -
             | 
| 202 | 
            -
                          w3c_capabilities
         | 
| 203 | 
            -
                        end
         | 
| 204 | 
            -
                      end
         | 
| 205 | 
            -
             | 
| 206 | 
            -
                      #
         | 
| 207 | 
            -
                      # @param [Hash] opts
         | 
| 208 | 
            -
                      # @option :browser_name             [String] required browser name
         | 
| 209 | 
            -
                      # @option :browser_version          [String] required browser version number
         | 
| 210 | 
            -
                      # @option :platform_name            [Symbol] one of :any, :win, :mac, or :x
         | 
| 211 | 
            -
                      # @option :accept_insecure_certs    [Boolean] does the driver accept insecure SSL certifications?
         | 
| 212 | 
            -
                      # @option :proxy                    [Selenium::WebDriver::Proxy, Hash] proxy configuration
         | 
| 213 | 
            -
                      #
         | 
| 214 | 
            -
                      # @api public
         | 
| 215 | 
            -
                      #
         | 
| 216 | 
            -
             | 
| 217 | 
            -
                      def initialize(opts = {})
         | 
| 218 | 
            -
                        @capabilities = opts
         | 
| 219 | 
            -
                        self.proxy = opts.delete(:proxy)
         | 
| 220 | 
            -
                      end
         | 
| 221 | 
            -
             | 
| 222 | 
            -
                      #
         | 
| 223 | 
            -
                      # Allows setting arbitrary capabilities.
         | 
| 224 | 
            -
                      #
         | 
| 225 | 
            -
             | 
| 226 | 
            -
                      def []=(key, value)
         | 
| 227 | 
            -
                        @capabilities[key] = value
         | 
| 228 | 
            -
                      end
         | 
| 229 | 
            -
             | 
| 230 | 
            -
                      def [](key)
         | 
| 231 | 
            -
                        @capabilities[key]
         | 
| 232 | 
            -
                      end
         | 
| 233 | 
            -
             | 
| 234 | 
            -
                      def merge!(other)
         | 
| 235 | 
            -
                        if other.respond_to?(:capabilities, true) && other.capabilities.is_a?(Hash)
         | 
| 236 | 
            -
                          @capabilities.merge! other.capabilities
         | 
| 237 | 
            -
                        elsif other.is_a? Hash
         | 
| 238 | 
            -
                          @capabilities.merge! other
         | 
| 239 | 
            -
                        else
         | 
| 240 | 
            -
                          raise ArgumentError, 'argument should be a Hash or implement #capabilities'
         | 
| 241 | 
            -
                        end
         | 
| 242 | 
            -
                      end
         | 
| 243 | 
            -
             | 
| 244 | 
            -
                      def proxy=(proxy)
         | 
| 245 | 
            -
                        case proxy
         | 
| 246 | 
            -
                        when Hash
         | 
| 247 | 
            -
                          @capabilities[:proxy] = Proxy.new(proxy)
         | 
| 248 | 
            -
                        when Proxy, nil
         | 
| 249 | 
            -
                          @capabilities[:proxy] = proxy
         | 
| 250 | 
            -
                        else
         | 
| 251 | 
            -
                          raise TypeError, "expected Hash or #{Proxy.name}, got #{proxy.inspect}:#{proxy.class}"
         | 
| 252 | 
            -
                        end
         | 
| 253 | 
            -
                      end
         | 
| 254 | 
            -
             | 
| 255 | 
            -
                      #
         | 
| 256 | 
            -
                      # @api private
         | 
| 257 | 
            -
                      #
         | 
| 258 | 
            -
             | 
| 259 | 
            -
                      def as_json(*)
         | 
| 260 | 
            -
                        hash = {}
         | 
| 261 | 
            -
             | 
| 262 | 
            -
                        @capabilities.each do |key, value|
         | 
| 263 | 
            -
                          case key
         | 
| 264 | 
            -
                          when :platform
         | 
| 265 | 
            -
                            hash['platform'] = value.to_s.upcase
         | 
| 266 | 
            -
                          when :proxy
         | 
| 267 | 
            -
                            if value
         | 
| 268 | 
            -
                              hash['proxy'] = value.as_json
         | 
| 269 | 
            -
                              hash['proxy']['proxyType'] &&= hash['proxy']['proxyType'].downcase
         | 
| 270 | 
            -
                              hash['proxy']['noProxy'] = hash['proxy']['noProxy'].split(', ') if hash['proxy']['noProxy'].is_a?(String)
         | 
| 271 | 
            -
                            end
         | 
| 272 | 
            -
                          when String, :firefox_binary
         | 
| 273 | 
            -
                            hash[key.to_s] = value
         | 
| 274 | 
            -
                          when Symbol
         | 
| 275 | 
            -
                            hash[camel_case(key.to_s)] = value
         | 
| 276 | 
            -
                          else
         | 
| 277 | 
            -
                            raise TypeError, "expected String or Symbol, got #{key.inspect}:#{key.class} / #{value.inspect}"
         | 
| 278 | 
            -
                          end
         | 
| 279 | 
            -
                        end
         | 
| 280 | 
            -
             | 
| 281 | 
            -
                        hash
         | 
| 282 | 
            -
                      end
         | 
| 283 | 
            -
             | 
| 284 | 
            -
                      def to_json(*)
         | 
| 285 | 
            -
                        JSON.generate as_json
         | 
| 286 | 
            -
                      end
         | 
| 287 | 
            -
             | 
| 288 | 
            -
                      def ==(other)
         | 
| 289 | 
            -
                        return false unless other.is_a? self.class
         | 
| 290 | 
            -
             | 
| 291 | 
            -
                        as_json == other.as_json
         | 
| 292 | 
            -
                      end
         | 
| 293 | 
            -
             | 
| 294 | 
            -
                      alias_method :eql?, :==
         | 
| 295 | 
            -
             | 
| 296 | 
            -
                      protected
         | 
| 297 | 
            -
             | 
| 298 | 
            -
                      attr_reader :capabilities
         | 
| 299 | 
            -
             | 
| 300 | 
            -
                      private
         | 
| 301 | 
            -
             | 
| 302 | 
            -
                      def camel_case(str)
         | 
| 303 | 
            -
                        str.gsub(/_([a-z])/) { Regexp.last_match(1).upcase }
         | 
| 304 | 
            -
                      end
         | 
| 305 | 
            -
             | 
| 306 | 
            -
                    end # Capabilities
         | 
| 307 | 
            -
                  end # W3c
         | 
| 308 | 
            -
                end # Remote
         | 
| 309 | 
            -
              end # WebDriver
         | 
| 310 | 
            -
            end # Selenium
         | 
| @@ -1,157 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            # Licensed to the Software Freedom Conservancy (SFC) under one
         | 
| 4 | 
            -
            # or more contributor license agreements.  See the NOTICE file
         | 
| 5 | 
            -
            # distributed with this work for additional information
         | 
| 6 | 
            -
            # regarding copyright ownership.  The SFC licenses this file
         | 
| 7 | 
            -
            # to you under the Apache License, Version 2.0 (the
         | 
| 8 | 
            -
            # "License"); you may not use this file except in compliance
         | 
| 9 | 
            -
            # with the License.  You may obtain a copy of the License at
         | 
| 10 | 
            -
            #
         | 
| 11 | 
            -
            #   http://www.apache.org/licenses/LICENSE-2.0
         | 
| 12 | 
            -
            #
         | 
| 13 | 
            -
            # Unless required by applicable law or agreed to in writing,
         | 
| 14 | 
            -
            # software distributed under the License is distributed on an
         | 
| 15 | 
            -
            # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
         | 
| 16 | 
            -
            # KIND, either express or implied.  See the License for the
         | 
| 17 | 
            -
            # specific language governing permissions and limitations
         | 
| 18 | 
            -
            # under the License.
         | 
| 19 | 
            -
             | 
| 20 | 
            -
            module Selenium
         | 
| 21 | 
            -
              module WebDriver
         | 
| 22 | 
            -
                module Remote
         | 
| 23 | 
            -
                  module W3C
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                    #
         | 
| 26 | 
            -
                    # http://www.w3.org/TR/2015/WD-webdriver-20150918/#list-of-endpoints
         | 
| 27 | 
            -
                    # @api private
         | 
| 28 | 
            -
                    #
         | 
| 29 | 
            -
             | 
| 30 | 
            -
                    class Bridge
         | 
| 31 | 
            -
                      COMMANDS = {
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                        #
         | 
| 34 | 
            -
                        # session handling
         | 
| 35 | 
            -
                        #
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                        new_session: [:post, 'session'],
         | 
| 38 | 
            -
                        delete_session: [:delete, 'session/:session_id'],
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                        #
         | 
| 41 | 
            -
                        # basic driver
         | 
| 42 | 
            -
                        #
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                        get: [:post, 'session/:session_id/url'],
         | 
| 45 | 
            -
                        get_current_url: [:get, 'session/:session_id/url'],
         | 
| 46 | 
            -
                        back: [:post, 'session/:session_id/back'],
         | 
| 47 | 
            -
                        forward: [:post, 'session/:session_id/forward'],
         | 
| 48 | 
            -
                        refresh: [:post, 'session/:session_id/refresh'],
         | 
| 49 | 
            -
                        get_title: [:get, 'session/:session_id/title'],
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                        #
         | 
| 52 | 
            -
                        # window and Frame handling
         | 
| 53 | 
            -
                        #
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                        get_window_handle: [:get, 'session/:session_id/window'],
         | 
| 56 | 
            -
                        new_window: [:post, 'session/:session_id/window/new'],
         | 
| 57 | 
            -
                        close_window: [:delete, 'session/:session_id/window'],
         | 
| 58 | 
            -
                        switch_to_window: [:post, 'session/:session_id/window'],
         | 
| 59 | 
            -
                        get_window_handles: [:get, 'session/:session_id/window/handles'],
         | 
| 60 | 
            -
                        fullscreen_window: [:post, 'session/:session_id/window/fullscreen'],
         | 
| 61 | 
            -
                        minimize_window: [:post, 'session/:session_id/window/minimize'],
         | 
| 62 | 
            -
                        maximize_window: [:post, 'session/:session_id/window/maximize'],
         | 
| 63 | 
            -
                        set_window_size: [:post, 'session/:session_id/window/size'],
         | 
| 64 | 
            -
                        get_window_size: [:get, 'session/:session_id/window/size'],
         | 
| 65 | 
            -
                        set_window_position: [:post, 'session/:session_id/window/position'],
         | 
| 66 | 
            -
                        get_window_position: [:get, 'session/:session_id/window/position'],
         | 
| 67 | 
            -
                        set_window_rect: [:post, 'session/:session_id/window/rect'],
         | 
| 68 | 
            -
                        get_window_rect: [:get, 'session/:session_id/window/rect'],
         | 
| 69 | 
            -
                        switch_to_frame: [:post, 'session/:session_id/frame'],
         | 
| 70 | 
            -
                        switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'],
         | 
| 71 | 
            -
             | 
| 72 | 
            -
                        #
         | 
| 73 | 
            -
                        # element
         | 
| 74 | 
            -
                        #
         | 
| 75 | 
            -
             | 
| 76 | 
            -
                        find_element: [:post, 'session/:session_id/element'],
         | 
| 77 | 
            -
                        find_elements: [:post, 'session/:session_id/elements'],
         | 
| 78 | 
            -
                        find_child_element: [:post, 'session/:session_id/element/:id/element'],
         | 
| 79 | 
            -
                        find_child_elements: [:post, 'session/:session_id/element/:id/elements'],
         | 
| 80 | 
            -
                        get_active_element: [:get, 'session/:session_id/element/active'],
         | 
| 81 | 
            -
                        is_element_selected: [:get, 'session/:session_id/element/:id/selected'],
         | 
| 82 | 
            -
                        get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'],
         | 
| 83 | 
            -
                        get_element_property: [:get, 'session/:session_id/element/:id/property/:name'],
         | 
| 84 | 
            -
                        get_element_css_value: [:get, 'session/:session_id/element/:id/css/:property_name'],
         | 
| 85 | 
            -
                        get_element_text: [:get, 'session/:session_id/element/:id/text'],
         | 
| 86 | 
            -
                        get_element_tag_name: [:get, 'session/:session_id/element/:id/name'],
         | 
| 87 | 
            -
                        get_element_rect: [:get, 'session/:session_id/element/:id/rect'],
         | 
| 88 | 
            -
                        is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'],
         | 
| 89 | 
            -
             | 
| 90 | 
            -
                        #
         | 
| 91 | 
            -
                        # document handling
         | 
| 92 | 
            -
                        #
         | 
| 93 | 
            -
             | 
| 94 | 
            -
                        get_page_source: [:get, 'session/:session_id/source'],
         | 
| 95 | 
            -
                        execute_script: [:post, 'session/:session_id/execute/sync'],
         | 
| 96 | 
            -
                        execute_async_script: [:post, 'session/:session_id/execute/async'],
         | 
| 97 | 
            -
             | 
| 98 | 
            -
                        #
         | 
| 99 | 
            -
                        # cookies
         | 
| 100 | 
            -
                        #
         | 
| 101 | 
            -
             | 
| 102 | 
            -
                        get_all_cookies: [:get, 'session/:session_id/cookie'],
         | 
| 103 | 
            -
                        get_cookie: [:get, 'session/:session_id/cookie/:name'],
         | 
| 104 | 
            -
                        add_cookie: [:post, 'session/:session_id/cookie'],
         | 
| 105 | 
            -
                        delete_cookie: [:delete, 'session/:session_id/cookie/:name'],
         | 
| 106 | 
            -
                        delete_all_cookies: [:delete, 'session/:session_id/cookie'],
         | 
| 107 | 
            -
             | 
| 108 | 
            -
                        #
         | 
| 109 | 
            -
                        # timeouts
         | 
| 110 | 
            -
                        #
         | 
| 111 | 
            -
             | 
| 112 | 
            -
                        set_timeout: [:post, 'session/:session_id/timeouts'],
         | 
| 113 | 
            -
             | 
| 114 | 
            -
                        #
         | 
| 115 | 
            -
                        # actions
         | 
| 116 | 
            -
                        #
         | 
| 117 | 
            -
             | 
| 118 | 
            -
                        actions: [:post, 'session/:session_id/actions'],
         | 
| 119 | 
            -
                        release_actions: [:delete, 'session/:session_id/actions'],
         | 
| 120 | 
            -
             | 
| 121 | 
            -
                        #
         | 
| 122 | 
            -
                        # Element Operations
         | 
| 123 | 
            -
                        #
         | 
| 124 | 
            -
             | 
| 125 | 
            -
                        element_click: [:post, 'session/:session_id/element/:id/click'],
         | 
| 126 | 
            -
                        element_tap: [:post, 'session/:session_id/element/:id/tap'],
         | 
| 127 | 
            -
                        element_clear: [:post, 'session/:session_id/element/:id/clear'],
         | 
| 128 | 
            -
                        element_send_keys: [:post, 'session/:session_id/element/:id/value'],
         | 
| 129 | 
            -
             | 
| 130 | 
            -
                        #
         | 
| 131 | 
            -
                        # alerts
         | 
| 132 | 
            -
                        #
         | 
| 133 | 
            -
             | 
| 134 | 
            -
                        dismiss_alert: [:post, 'session/:session_id/alert/dismiss'],
         | 
| 135 | 
            -
                        accept_alert: [:post, 'session/:session_id/alert/accept'],
         | 
| 136 | 
            -
                        get_alert_text: [:get, 'session/:session_id/alert/text'],
         | 
| 137 | 
            -
                        send_alert_text: [:post, 'session/:session_id/alert/text'],
         | 
| 138 | 
            -
             | 
| 139 | 
            -
                        #
         | 
| 140 | 
            -
                        # screenshot
         | 
| 141 | 
            -
                        #
         | 
| 142 | 
            -
             | 
| 143 | 
            -
                        take_screenshot: [:get, 'session/:session_id/screenshot'],
         | 
| 144 | 
            -
                        take_element_screenshot: [:get, 'session/:session_id/element/:id/screenshot'],
         | 
| 145 | 
            -
             | 
| 146 | 
            -
                        #
         | 
| 147 | 
            -
                        # server extensions
         | 
| 148 | 
            -
                        #
         | 
| 149 | 
            -
             | 
| 150 | 
            -
                        upload_file: [:post, 'session/:session_id/se/file']
         | 
| 151 | 
            -
                      }.freeze
         | 
| 152 | 
            -
             | 
| 153 | 
            -
                    end # Bridge
         | 
| 154 | 
            -
                  end # W3C
         | 
| 155 | 
            -
                end # Remote
         | 
| 156 | 
            -
              end # WebDriver
         | 
| 157 | 
            -
            end # Selenium
         |