Class: Ferrum::Browser::Xvfb

Inherits:
Object
  • Object
show all
Defined in:
lib/ferrum/browser/xvfb.rb

Constant Summary collapse

NOT_FOUND =
"Could not find an executable for the Xvfb. Try to install " \
"it with your package manager"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Xvfb

Returns a new instance of Xvfb.



15
16
17
18
19
20
21
# File 'lib/ferrum/browser/xvfb.rb', line 15

def initialize(options)
  @path = Binary.find("Xvfb")
  raise BinaryNotFoundError, NOT_FOUND unless @path

  @screen_size = "#{options.window_size.join('x')}x24"
  @display_id = (Time.now.to_f * 1000).to_i % 100_000_000
end

Instance Attribute Details

#display_idObject (readonly)

Returns the value of attribute display_id.



13
14
15
# File 'lib/ferrum/browser/xvfb.rb', line 13

def display_id
  @display_id
end

#pidObject (readonly)

Returns the value of attribute pid.



13
14
15
# File 'lib/ferrum/browser/xvfb.rb', line 13

def pid
  @pid
end

#screen_sizeObject (readonly)

Returns the value of attribute screen_size.



13
14
15
# File 'lib/ferrum/browser/xvfb.rb', line 13

def screen_size
  @screen_size
end

Class Method Details

.start(*args) ⇒ Object



9
10
11
# File 'lib/ferrum/browser/xvfb.rb', line 9

def self.start(*args)
  new(*args).tap(&:start)
end

Instance Method Details

#startObject



23
24
25
26
# File 'lib/ferrum/browser/xvfb.rb', line 23

def start
  @pid = ::Process.spawn("#{@path} :#{display_id} -screen 0 #{screen_size}")
  ::Process.detach(@pid)
end

#to_envObject



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

def to_env
  { "DISPLAY" => ":#{display_id}" }
end