class Selenium::WebDriver::Remote::W3CCapabilities
Specification of the desired and/or actual capabilities of the browser that the server is being asked to create.
Constants
- DEFAULTS
Public Class Methods
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 59 def edge(opts = {}) new({ :browser_name => "MicrosoftEdge", :platform => :windows, }.merge(opts)) end
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 66 def firefox(opts = {}) opts[:browser_version] = opts.delete :version opts[:platform_name] = opts.delete :platform new({ :browser_name => "firefox", :marionette => true }.merge(opts)) end
@api private
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 86 def json_create(data) data = data.dup # Convert due to Remote Driver implementation data["browserVersion"] = data.delete("version") if data["version"] data["platformName"] = data.delete("platform") if data["platform"] caps = new caps.browser_name = data.delete("browserName") if data["browserName"] caps.browser_version = data.delete("browserVersion") if data["browserVersion"] caps.platform_name = data.delete("platformName") if data["platformName"] caps.platform_version = data.delete("platformVersion") if data["platformVersion"] caps.accept_ssl_certs = data.delete("acceptSslCerts") if data["acceptSslCerts"] caps.takes_screenshot = data.delete("takesScreenshot") if data["takesScreenshot"] caps.takes_element_screenshot = data.delete("takesElementScreenshot") if data["takesElementScreenshot"] caps.page_load_strategy = data.delete("pageLoadStrategy") if data["pageloadStrategy"] caps.proxy = Proxy.json_create(data['proxy']) if data['proxy'] # Remote Server Specific caps[:remote_session_id] = data.delete('webdriver.remote.sessionid') # Obsolete capabilities returned by Remote Server data.delete("javascriptEnabled") data.delete('cssSelectorsEnabled') # Marionette Specific caps[:specification_level] = data.delete("specificaionLevel") caps[:xul_app_id] = data.delete("XULappId") caps[:raise_accessibility_exceptions] = data.delete('raisesAccessibilityExceptions') caps[:rotatable] = data.delete('rotatable') caps[:app_build_id] = data.delete('appBuildId') caps[:device] = data.delete('device') # any remaining pairs will be added as is, with no conversion caps.merge!(data) caps end
@param [Hash] opts @option :browser_name [String] required browser name @option :browser_version [String] required browser version number @option :platform_name [Symbol] one of :any, :win, :mac, or :x @option :platform_version [String] required platform version number @option :accept_ssl_certs [Boolean] does the driver accept SSL Cerfifications? @option :takes_screenshot [Boolean] can this driver take screenshots? @option :takes_element_screenshot [Boolean] can this driver take element screenshots? @option :proxy [Selenium::WebDriver::Proxy, Hash] proxy configuration
@api public
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 138 def initialize(opts = {}) @capabilities = DEFAULTS.merge(opts) self.proxy = opts.delete(:proxy) end
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 78 def w3c?(opts = {}) opts[:desired_capabilities].is_a?(W3CCapabilities) || opts[:marionette] end
Public Instance Methods
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 204 def ==(other) return false unless other.kind_of? self.class as_json == other.as_json end
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 151 def [](key) @capabilities[key] end
Allows setting arbitrary capabilities.
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 147 def []=(key, value) @capabilities[key] = value end
@api private
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 179 def as_json(opts = nil) hash = {} @capabilities.each do |key, value| case key when :platform hash['platform'] = value.to_s.upcase when :proxy hash['proxy'] = value.as_json if value when String, :firefox_binary hash[key.to_s] = value when Symbol hash[camel_case(key.to_s)] = value else raise TypeError, "expected String or Symbol, got #{key.inspect}:#{key.class} / #{value.inspect}" end end hash end
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 155 def merge!(other) if other.respond_to?(:capabilities, true) && other.capabilities.kind_of?(Hash) @capabilities.merge! other.capabilities elsif other.kind_of? Hash @capabilities.merge! other else raise ArgumentError, "argument should be a Hash or implement #capabilities" end end
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 165 def proxy=(proxy) case proxy when Hash @capabilities[:proxy] = Proxy.new(proxy) when Proxy, nil @capabilities[:proxy] = proxy else raise TypeError, "expected Hash or #{Proxy.name}, got #{proxy.inspect}:#{proxy.class}" end end
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 200 def to_json(*args) WebDriver.json_dump as_json end
Protected Instance Methods
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 213 def capabilities @capabilities end
Private Instance Methods
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 219 def camel_case(str) str.gsub(/_([a-z])/) { $1.upcase } end