Class: Ferrum::Browser

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

Defined Under Namespace

Classes: Chrome, Client, Command, Firefox, Process, Subscriber, WebSocket

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.



35
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
# File 'lib/ferrum/browser.rb', line 35

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.



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

def base_url
  @base_url
end

#clientObject (readonly)

Returns the value of attribute client.



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

def client
  @client
end

#contextsObject (readonly)

Returns the value of attribute contexts.



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

def contexts
  @contexts
end

#js_errorsObject (readonly)

Returns the value of attribute js_errors.



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

def js_errors
  @js_errors
end

#loggerObject (readonly)

Returns the value of attribute logger.



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

def logger
  @logger
end

#optionsObject (readonly)

Returns the value of attribute options.



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

def options
  @options
end

#processObject (readonly)

Returns the value of attribute process.



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

def process
  @process
end

#slowmoObject (readonly)

Returns the value of attribute slowmo.



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

def slowmo
  @slowmo
end

#timeoutObject



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

def timeout
  @timeout || DEFAULT_TIMEOUT
end

#window_sizeObject (readonly)

Returns the value of attribute window_size.



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

def window_size
  @window_size
end

#ws_max_receive_sizeObject (readonly)

Returns the value of attribute ws_max_receive_size.



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

def ws_max_receive_size
  @ws_max_receive_size
end

Instance Method Details

#command(*args) ⇒ Object



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

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

#crashObject



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

def crash
  command("Browser.crash")
end

#extensionsObject



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

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

#quitObject



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

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

#resetObject



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

def reset
  @window_size = @original_window_size
  contexts.reset
end

#resize(**options) ⇒ Object



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

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

#restartObject



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

def restart
  quit
  start
end