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
Public Class Methods
# File lib/selenium/webdriver/remote/capabilities.rb, line 62 def android(opts = {}) new({ :browser_name => "android", :platform => :android, :javascript_enabled => true, :rotatable => true, :takes_screenshot => true }.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 72 def chrome(opts = {}) new({ :browser_name => "chrome", :javascript_enabled => true, :css_selectors_enabled => true, :loggingPrefs => {:browser => "ALL", :driver => "ALL"} }.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 82 def edge(opts = {}) W3CCapabilities.edge(opts) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 86 def firefox(opts = {}) return W3CCapabilities.firefox(opts) if opts[:marionette] 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 97 def htmlunit(opts = {}) new({ :browser_name => "htmlunit" }.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 103 def htmlunitwithjs(opts = {}) new({ :browser_name => "htmlunit", :javascript_enabled => true }.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 110 def internet_explorer(opts = {}) new({ :browser_name => "internet explorer", :platform => :windows, :takes_screenshot => true, :css_selectors_enabled => true, :native_events => true }.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 129 def ipad(opts = {}) new({ :browser_name => "iPad", :platform => :mac, :javascript_enabled => true }.merge(opts)) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 121 def iphone(opts = {}) new({ :browser_name => "iPhone", :platform => :mac, :javascript_enabled => true }.merge(opts)) end
@api private
# File lib/selenium/webdriver/remote/capabilities.rb, line 160 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.to_sym if data.has_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.has_key?('proxy') # 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
Firefox-specific options:
@option :firefox_profile [Selenium::WebDriver::Firefox::Profile] the firefox profile to use
@api public
# File lib/selenium/webdriver/remote/capabilities.rb, line 197 def initialize(opts = {}) @capabilities = DEFAULTS.merge(opts) self.proxy = opts.delete(:proxy) end
# File lib/selenium/webdriver/remote/capabilities.rb, line 137 def phantomjs(opts = {}) 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 146 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 265 def ==(other) return false unless other.kind_of? self.class as_json == other.as_json end
# File lib/selenium/webdriver/remote/capabilities.rb, line 210 def [](key) @capabilities[key] end
Allows setting arbitrary capabilities.
# File lib/selenium/webdriver/remote/capabilities.rb, line 206 def []=(key, value) @capabilities[key] = value end
@api private
# File lib/selenium/webdriver/remote/capabilities.rb, line 238 def as_json(opts = nil) hash = {} @capabilities.each do |key, value| case key when :platform hash['platform'] = value.to_s.upcase when :firefox_profile hash['firefox_profile'] = value.as_json['zip'] if value 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/capabilities.rb, line 214 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/capabilities.rb, line 224 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 261 def to_json(*args) JSON.generate as_json end
Protected Instance Methods
# File lib/selenium/webdriver/remote/capabilities.rb, line 273 def capabilities @capabilities end
Private Instance Methods
# File lib/selenium/webdriver/remote/capabilities.rb, line 279 def camel_case(str) str.gsub(/_([a-z])/) { $1.upcase } end