Class: Ferrum::Browser

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/ferrum/browser.rb,
lib/ferrum/browser/xvfb.rb,
lib/ferrum/browser/client.rb,
lib/ferrum/browser/command.rb,
lib/ferrum/browser/process.rb,
lib/ferrum/browser/subscriber.rb,
lib/ferrum/browser/web_socket.rb,
lib/ferrum/browser/options/base.rb,
lib/ferrum/browser/options/chrome.rb,
lib/ferrum/browser/options/firefox.rb

Defined Under Namespace

Modules: Options Classes: Client, Command, Process, Subscriber, WebSocket, Xvfb

Constant Summary collapse

DEFAULT_TIMEOUT =
ENV.fetch("FERRUM_DEFAULT_TIMEOUT", 5).to_i
WINDOW_SIZE =
[1024, 768].freeze
BASE_URL_SCHEMA =
%w[http https].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = nil) ⇒ Browser

Returns a new instance of Browser.



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/ferrum/browser.rb', line 36

def initialize(options = nil)
  options ||= {}

  @client = nil
  @window_size = options.fetch(:window_size, WINDOW_SIZE)
  @original_window_size = @window_size

  @options = Hash(options.merge(window_size: @window_size))
  @logger, @timeout, @ws_max_receive_size =
    @options.values_at(:logger, :timeout, :ws_max_receive_size)
  @js_errors = @options.fetch(:js_errors, false)
  @slowmo = @options[:slowmo].to_f

  if @options.key?(:base_url)
    self.base_url = @options[:base_url]
  end

  if ENV["FERRUM_DEBUG"] && !@logger
    STDOUT.sync = true
    @logger = STDOUT
    @options[:logger] = @logger
  end

  @options.freeze

  start
end

Instance Attribute Details

#base_urlObject

Returns the value of attribute base_url.



32
33
34
# File 'lib/ferrum/browser.rb', line 32

def base_url
  @base_url
end

#clientObject (readonly)

Returns the value of attribute client.



32
33
34
# File 'lib/ferrum/browser.rb', line 32

def client
  @client
end

#contextsObject (readonly)

Returns the value of attribute contexts.



32
33
34
# File 'lib/ferrum/browser.rb', line 32

def contexts
  @contexts
end

#js_errorsObject (readonly)

Returns the value of attribute js_errors.



32
33
34
# File 'lib/ferrum/browser.rb', line 32

def js_errors
  @js_errors
end

#loggerObject (readonly)

Returns the value of attribute logger.



32
33
34
# File 'lib/ferrum/browser.rb', line 32

def logger
  @logger
end

#optionsObject (readonly)

Returns the value of attribute options.



32
33
34
# File 'lib/ferrum/browser.rb', line 32

def options
  @options
end

#processObject (readonly)

Returns the value of attribute process.



32
33
34
# File 'lib/ferrum/browser.rb', line 32

def process
  @process
end

#slowmoObject (readonly)

Returns the value of attribute slowmo.



32
33
34
# File 'lib/ferrum/browser.rb', line 32

def slowmo
  @slowmo
end

#timeoutObject



79
80
81
# File 'lib/ferrum/browser.rb', line 79

def timeout
  @timeout || DEFAULT_TIMEOUT
end

#window_sizeObject (readonly)

Returns the value of attribute window_size.



32
33
34
# File 'lib/ferrum/browser.rb', line 32

def window_size
  @window_size
end

#ws_max_receive_sizeObject (readonly)

Returns the value of attribute ws_max_receive_size.



32
33
34
# File 'lib/ferrum/browser.rb', line 32

def ws_max_receive_size
  @ws_max_receive_size
end

Instance Method Details

#command(*args) ⇒ Object



83
84
85
86
87
88
# File 'lib/ferrum/browser.rb', line 83

def command(*args)
  @client.command(*args)
rescue DeadBrowserError
  restart
  raise
end

#crashObject



111
112
113
# File 'lib/ferrum/browser.rb', line 111

def crash
  command("Browser.crash")
end

#extensionsObject



73
74
75
76
77
# File 'lib/ferrum/browser.rb', line 73

def extensions
  @extensions ||= Array(@options[:extensions]).map do |ext|
    (ext.is_a?(Hash) && ext[:source]) || File.read(ext)
  end
end

#quitObject



100
101
102
103
104
# File 'lib/ferrum/browser.rb', line 100

def quit
  @client.close
  @process.stop
  @client = @process = @contexts = nil
end

#resetObject



90
91
92
93
# File 'lib/ferrum/browser.rb', line 90

def reset
  @window_size = @original_window_size
  contexts.reset
end

#resize(**options) ⇒ Object



106
107
108
109
# File 'lib/ferrum/browser.rb', line 106

def resize(**options)
  @window_size = [options[:width], options[:height]]
  page.resize(**options)
end

#restartObject



95
96
97
98
# File 'lib/ferrum/browser.rb', line 95

def restart
  quit
  start
end