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.



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

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.



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

def base_url
  @base_url
end

#clientObject (readonly)

Returns the value of attribute client.



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

def client
  @client
end

#js_errorsObject (readonly)

Returns the value of attribute js_errors.



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

def js_errors
  @js_errors
end

#loggerObject (readonly)

Returns the value of attribute logger.



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

def logger
  @logger
end

#optionsObject (readonly)

Returns the value of attribute options.



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

def options
  @options
end

#processObject (readonly)

Returns the value of attribute process.



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

def process
  @process
end

#slowmoObject (readonly)

Returns the value of attribute slowmo.



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

def slowmo
  @slowmo
end

#timeoutObject



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

def timeout
  @timeout || DEFAULT_TIMEOUT
end

#window_sizeObject (readonly)

Returns the value of attribute window_size.



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

def window_size
  @window_size
end

Instance Method Details

#clear_memory_cacheObject



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

def clear_memory_cache
  page.command("Network.clearBrowserCache")
end

#command(*args) ⇒ Object



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

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

#crashObject



114
115
116
# File 'lib/ferrum/browser.rb', line 114

def crash
  command("Browser.crash")
end

#extensionsObject



70
71
72
# File 'lib/ferrum/browser.rb', line 70

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

#quitObject



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

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

#resetObject



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

def reset
  @window_size = @original_window_size
  targets.reset
end

#resize(**options) ⇒ Object



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

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

#targetsObject



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

def targets
  @targets ||= Targets.new(self)
end