class Selenium::WebDriver::Firefox::Profile
Constants
- VALID_PREFERENCE_TYPES
- WEBDRIVER_EXTENSION_PATH
- WEBDRIVER_PREFS
Attributes
load_no_focus_lib[W]
log_file[R]
name[R]
native_events[W]
secure_ssl[W]
Public Class Methods
default_preferences()
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 51 def default_preferences @default_preferences ||= JSON.parse( File.read(File.expand_path("#{WebDriver.root}/selenium/webdriver/firefox/extension/prefs.json")) ).freeze end
from_name(name)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 44 def from_name(name) profile = ini[name] return profile if profile raise Error::WebDriverError, "unable to find profile named: #{name.inspect}" end
ini()
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 40 def ini @ini ||= ProfilesIni.new end
new(model = nil)
click to toggle source
Create a new Profile
instance
@example User configured profile
profile = Selenium::WebDriver::Firefox::Profile.new profile['network.proxy.http'] = 'localhost' profile['network.proxy.http_port'] = 9090 driver = Selenium::WebDriver.for :firefox, :profile => profile
# File lib/selenium/webdriver/firefox/profile.rb, line 70 def initialize(model = nil) @model = verify_model(model) model_prefs = read_model_prefs if model_prefs.empty? @native_events = DEFAULT_ENABLE_NATIVE_EVENTS @secure_ssl = DEFAULT_SECURE_SSL @untrusted_issuer = DEFAULT_ASSUME_UNTRUSTED_ISSUER @load_no_focus_lib = DEFAULT_LOAD_NO_FOCUS_LIB @additional_prefs = {} else # TODO: clean this up @native_events = model_prefs.delete(WEBDRIVER_PREFS[:native_events]) == 'true' @secure_ssl = model_prefs.delete(WEBDRIVER_PREFS[:untrusted_certs]) != 'true' @untrusted_issuer = model_prefs.delete(WEBDRIVER_PREFS[:untrusted_issuer]) == 'true' # not stored in profile atm, so will always be false. @load_no_focus_lib = model_prefs.delete(WEBDRIVER_PREFS[:load_no_focus_lib]) == 'true' @additional_prefs = model_prefs end @extensions = {} end
Public Instance Methods
[]=(key, value)
click to toggle source
Set a preference for this particular profile.
@see kb.mozillazine.org/About:config_entries @see preferential.mozdev.org/preferences.html
# File lib/selenium/webdriver/firefox/profile.rb, line 114 def []=(key, value) unless VALID_PREFERENCE_TYPES.any? { |e| value.is_a? e } raise TypeError, "expected one of #{VALID_PREFERENCE_TYPES.inspect}, got #{value.inspect}:#{value.class}" end if value.is_a?(String) && Util.stringified?(value) raise ArgumentError, "preference values must be plain strings: #{key.inspect} => #{value.inspect}" end @additional_prefs[key.to_s] = value end
add_extension(path, name = extension_name_for(path))
click to toggle source
Add the extension (directory, .zip or .xpi) at the given path to the profile.
# File lib/selenium/webdriver/firefox/profile.rb, line 145 def add_extension(path, name = extension_name_for(path)) @extensions[name] = Extension.new(path) end
add_webdriver_extension()
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 135 def add_webdriver_extension return if @extensions.key?(:webdriver) add_extension(WEBDRIVER_EXTENSION_PATH, :webdriver) end
assume_untrusted_certificate_issuer=(bool)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 165 def assume_untrusted_certificate_issuer=(bool) @untrusted_issuer = bool end
assume_untrusted_certificate_issuer?()
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 161 def assume_untrusted_certificate_issuer? @untrusted_issuer == true end
encoded()
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 192 def encoded Zipper.zip(layout_on_disk) end
layout_on_disk()
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 95 def layout_on_disk profile_dir = @model ? create_tmp_copy(@model) : Dir.mktmpdir('webdriver-profile') FileReaper << profile_dir install_extensions(profile_dir) delete_lock_files(profile_dir) delete_extensions_cache(profile_dir) update_user_prefs_in(profile_dir) profile_dir end
load_no_focus_lib?()
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 153 def load_no_focus_lib? @load_no_focus_lib == true end
log_file=(file)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 130 def log_file=(file) @log_file = file self[WEBDRIVER_PREFS[:log_file]] = file end
native_events?()
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 149 def native_events? @native_events == true end
port=(port)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 126 def port=(port) self[WEBDRIVER_PREFS[:port]] = port end
proxy=(proxy)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 169 def proxy=(proxy) raise TypeError, "expected #{Proxy.name}, got #{proxy.inspect}:#{proxy.class}" unless proxy.is_a? Proxy case proxy.type when :manual self['network.proxy.type'] = 1 set_manual_proxy_preference 'ftp', proxy.ftp set_manual_proxy_preference 'http', proxy.http set_manual_proxy_preference 'ssl', proxy.ssl set_manual_proxy_preference 'socks', proxy.socks self['network.proxy.no_proxies_on'] = proxy.no_proxy || '' when :pac self['network.proxy.type'] = 2 self['network.proxy.autoconfig_url'] = proxy.pac when :auto_detect self['network.proxy.type'] = 4 else raise ArgumentError, "unsupported proxy type #{proxy.type}" end end
secure_ssl?()
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 157 def secure_ssl? @secure_ssl == true end
Private Instance Methods
delete_extensions_cache(directory)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 222 def delete_extensions_cache(directory) FileUtils.rm_f File.join(directory, 'extensions.cache') end
delete_lock_files(directory)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 226 def delete_lock_files(directory) %w[.parentlock parent.lock].each do |name| FileUtils.rm_f File.join(directory, name) end end
extension_name_for(path)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 232 def extension_name_for(path) File.basename(path, File.extname(path)) end
install_extensions(directory)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 207 def install_extensions(directory) destination = File.join(directory, 'extensions') @extensions.each do |name, extension| WebDriver.logger.debug({extenstion: name}.inspect) extension.write_to(destination) end end
read_model_prefs()
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 216 def read_model_prefs return {} unless @model read_user_prefs(File.join(@model, 'user.js')) end
read_user_prefs(path)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 254 def read_user_prefs(path) prefs = {} return prefs unless File.exist?(path) File.read(path).split("\n").each do |line| next unless line =~ /user_pref\("([^"]+)"\s*,\s*(.+?)\);/ key = Regexp.last_match(1).strip value = Regexp.last_match(2).strip # wrap the value in an array to make it a valid JSON string. prefs[key] = JSON.parse("[#{value}]").first end prefs end
set_manual_proxy_preference(key, value)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 198 def set_manual_proxy_preference(key, value) return unless value host, port = value.to_s.split(':', 2) self["network.proxy.#{key}"] = host self["network.proxy.#{key}_port"] = Integer(port) if port end
update_user_prefs_in(directory)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 236 def update_user_prefs_in(directory) path = File.join(directory, 'user.js') prefs = read_user_prefs(path) prefs.merge! self.class.default_preferences.fetch 'mutable' prefs.merge! @additional_prefs prefs.merge! self.class.default_preferences.fetch 'frozen' prefs[WEBDRIVER_PREFS[:untrusted_certs]] = !secure_ssl? prefs[WEBDRIVER_PREFS[:native_events]] = native_events? prefs[WEBDRIVER_PREFS[:untrusted_issuer]] = assume_untrusted_certificate_issuer? # If the user sets the home page, we should also start up there prefs['startup.homepage_welcome_url'] = prefs['browser.startup.homepage'] write_prefs prefs, path end
write_prefs(prefs, path)
click to toggle source
# File lib/selenium/webdriver/firefox/profile.rb, line 271 def write_prefs(prefs, path) File.open(path, 'w') do |file| prefs.each do |key, value| file.puts %{user_pref("#{key}", #{value.to_json});} end end end