Class: Ferrum::Browser

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

Defined Under Namespace

Classes: Client, 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.



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/ferrum/browser.rb', line 32

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 = @options.values_at(:logger, :timeout)
  @js_errors = @options.fetch(:js_errors, false)
  @slowmo = @options[:slowmo].to_i

  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.



28
29
30
# File 'lib/ferrum/browser.rb', line 28

def base_url
  @base_url
end

#clientObject (readonly)

Returns the value of attribute client.



28
29
30
# File 'lib/ferrum/browser.rb', line 28

def client
  @client
end

#contextsObject (readonly)

Returns the value of attribute contexts.



28
29
30
# File 'lib/ferrum/browser.rb', line 28

def contexts
  @contexts
end

#js_errorsObject (readonly)

Returns the value of attribute js_errors.



28
29
30
# File 'lib/ferrum/browser.rb', line 28

def js_errors
  @js_errors
end

#loggerObject (readonly)

Returns the value of attribute logger.



28
29
30
# File 'lib/ferrum/browser.rb', line 28

def logger
  @logger
end

#optionsObject (readonly)

Returns the value of attribute options.



28
29
30
# File 'lib/ferrum/browser.rb', line 28

def options
  @options
end

#processObject (readonly)

Returns the value of attribute process.



28
29
30
# File 'lib/ferrum/browser.rb', line 28

def process
  @process
end

#slowmoObject (readonly)

Returns the value of attribute slowmo.



28
29
30
# File 'lib/ferrum/browser.rb', line 28

def slowmo
  @slowmo
end

#timeoutObject



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

def timeout
  @timeout || DEFAULT_TIMEOUT
end

#window_sizeObject (readonly)

Returns the value of attribute window_size.



28
29
30
# File 'lib/ferrum/browser.rb', line 28

def window_size
  @window_size
end

Instance Method Details

#command(*args) ⇒ Object



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

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

#crashObject



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

def crash
  command("Browser.crash")
end

#extensionsObject



68
69
70
# File 'lib/ferrum/browser.rb', line 68

def extensions
  @extensions ||= Array(@options[:extensions]).map { |p| File.read(p) }
end

#quitObject



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

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

#resetObject



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

def reset
  @window_size = @original_window_size
  contexts.reset
end

#resize(**options) ⇒ Object



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

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

#restartObject



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

def restart
  quit
  start
end