class Selenium::WebDriver::Remote::Capabilities
Specification of the desired and/or actual capabilities of the browser that the server is being asked to create.
Constants
- DEFAULTS
Attributes
Public Class Methods
# File lib/selenium/webdriver/remote/capabilities.rb, line 75 def chrome(opts = {}) new({ browser_name: 'chrome', javascript_enabled: true, css_selectors_enabled: true }.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 83 def edge(opts = {}) new({ browser_name: 'MicrosoftEdge', platform: :windows }.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 90 def firefox(opts = {}) opts[:browser_version] = opts.delete(:version) if opts.key?(:version) opts[:platform_name] = opts.delete(:platform) if opts.key?(:platform) opts[:timeouts] = {} opts[:timeouts]['implicit'] = opts.delete(:implicit_timeout) if opts.key?(:implicit_timeout) opts[:timeouts]['pageLoad'] = opts.delete(:page_load_timeout) if opts.key?(:page_load_timeout) opts[:timeouts]['script'] = opts.delete(:script_timeout) if opts.key?(:script_timeout) new({browser_name: 'firefox', marionette: true}.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 100 def firefox_legacy(opts = {}) new({ browser_name: 'firefox', javascript_enabled: true, takes_screenshot: true, css_selectors_enabled: true }.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 109 def htmlunit(opts = {}) new({ browser_name: 'htmlunit' }.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 115 def htmlunitwithjs(opts = {}) new({ browser_name: 'htmlunit', javascript_enabled: true }.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 122 def internet_explorer(opts = {}) new({ browser_name: 'internet explorer', platform: :windows, takes_screenshot: true, css_selectors_enabled: true, native_events: true }.merge(opts)) end
@api private
# File lib/selenium/webdriver/remote/capabilities.rb, line 157 def json_create(data) data = data.dup caps = new caps.browser_name = data.delete('browserName') caps.version = data.delete('version') caps.platform = data.delete('platform').downcase.tr(' ', '_').to_sym if data.key?('platform') caps.javascript_enabled = data.delete('javascriptEnabled') caps.css_selectors_enabled = data.delete('cssSelectorsEnabled') caps.takes_screenshot = data.delete('takesScreenshot') caps.native_events = data.delete('nativeEvents') caps.rotatable = data.delete('rotatable') caps.proxy = Proxy.json_create(data['proxy']) if data.key?('proxy') && !data['proxy'].empty? # any remaining pairs will be added as is, with no conversion caps.merge!(data) caps end
@option :browser_name [String] required browser name @option :version [String] required browser version number @option :platform [Symbol] one of :any, :win, :mac, or :x @option :javascript_enabled [Boolean] does the driver have javascript enabled? @option :css_selectors_enabled [Boolean] does the driver support CSS selectors? @option :takes_screenshot [Boolean] can this driver take screenshots? @option :native_events [Boolean] does this driver use native events? @option :proxy [Selenium::WebDriver::Proxy, Hash] proxy configuration
@api public
# File lib/selenium/webdriver/remote/capabilities.rb, line 191 def initialize(opts = {}) @capabilities = DEFAULTS.merge(opts) self.proxy = opts.delete(:proxy) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 133 def phantomjs(opts = {}) WebDriver.logger.deprecate 'Selenium support for PhantomJS', 'headless Chrome/Firefox or HTMLUnit' new({ browser_name: 'phantomjs', javascript_enabled: true, takes_screenshot: true, css_selectors_enabled: true }.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 143 def safari(opts = {}) new({ browser_name: 'safari', platform: :mac, javascript_enabled: true, takes_screenshot: true, css_selectors_enabled: true }.merge(opts)) end
Public Instance Methods
# File lib/selenium/webdriver/remote/capabilities.rb, line 266 def ==(other) return false unless other.is_a? self.class as_json == other.as_json end
# File lib/selenium/webdriver/remote/capabilities.rb, line 204 def [](key) @capabilities[key] end
Allows setting arbitrary capabilities.
# File lib/selenium/webdriver/remote/capabilities.rb, line 200 def []=(key, value) @capabilities[key] = value end
@api private
# File lib/selenium/webdriver/remote/capabilities.rb, line 233 def as_json(*) # rubocop:disable Metrics/CyclomaticComplexity hash = {} @capabilities.each do |key, value| case key when :platform hash['platform'] = value.to_s.upcase when :firefox_profile if value WebDriver.logger.deprecate(':firefox_profile capabilitiy', 'Selenium::WebDriver::Firefox::Options#profile') hash['firefox_profile'] = value.as_json['zip'] end when :proxy hash['proxy'] = value.as_json if value when String, :firefox_binary if key == :firefox_binary && value WebDriver.logger.deprecate(':firefox_binary capabilitiy', 'Selenium::WebDriver::Firefox::Options#binary') end 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
Returns javascript_enabled
capability. It is true if not set explicitly.
# File lib/selenium/webdriver/remote/capabilities.rb, line 59 def javascript_enabled javascript_enabled = @capabilities.fetch(:javascript_enabled) javascript_enabled.nil? ? true : javascript_enabled end
# File lib/selenium/webdriver/remote/capabilities.rb, line 208 def merge!(other) if other.respond_to?(:capabilities, true) && other.capabilities.is_a?(Hash) @capabilities.merge! other.capabilities elsif other.is_a? Hash @capabilities.merge! other else raise ArgumentError, 'argument should be a Hash or implement #capabilities' end end
# File lib/selenium/webdriver/remote/capabilities.rb, line 218 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/capabilities.rb, line 262 def to_json(*) JSON.generate as_json end
Private Instance Methods
# File lib/selenium/webdriver/remote/capabilities.rb, line 279 def camel_case(str) str.gsub(/_([a-z])/) { Regexp.last_match(1).upcase } end