Class: Ferrum::Target

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

Constant Summary collapse

NEW_WINDOW_WAIT =
ENV.fetch("FERRUM_NEW_WINDOW_WAIT", 0.3).to_f

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(browser_client, session_id = nil, params = nil) ⇒ Target

Returns a new instance of Target.



14
15
16
17
18
19
20
# File 'lib/ferrum/target.rb', line 14

def initialize(browser_client, session_id = nil, params = nil)
  @page = nil
  @session_id = session_id
  @params = params
  @browser_client = browser_client
  @options = browser_client.options
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



11
12
13
# File 'lib/ferrum/target.rb', line 11

def options
  @options
end

#pageObject



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

def page
  @page ||= build_page
end

#session_idObject

Returns the value of attribute session_id.



12
13
14
# File 'lib/ferrum/target.rb', line 12

def session_id
  @session_id
end

Instance Method Details

#build_page(**options) ⇒ Object



38
39
40
41
# File 'lib/ferrum/target.rb', line 38

def build_page(**options)
  maybe_sleep_if_new_window
  Page.new(client, context_id: context_id, target_id: id, **options)
end

#clientObject



34
35
36
# File 'lib/ferrum/target.rb', line 34

def client
  @client ||= build_client
end

#commandObject



80
81
82
# File 'lib/ferrum/target.rb', line 80

def command(...)
  client.command(...)
end

#connected?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/ferrum/target.rb', line 26

def connected?
  !!@page
end

#context_idObject



63
64
65
# File 'lib/ferrum/target.rb', line 63

def context_id
  @params["browserContextId"]
end

#idObject



43
44
45
# File 'lib/ferrum/target.rb', line 43

def id
  @params["targetId"]
end

#iframe?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/ferrum/target.rb', line 71

def iframe?
  type == "iframe"
end

#maybe_sleep_if_new_windowObject



75
76
77
78
# File 'lib/ferrum/target.rb', line 75

def maybe_sleep_if_new_window
  # Dirty hack because new window doesn't have events at all
  sleep(NEW_WINDOW_WAIT) if window?
end

#opener_idObject



59
60
61
# File 'lib/ferrum/target.rb', line 59

def opener_id
  @params["openerId"]
end

#titleObject



51
52
53
# File 'lib/ferrum/target.rb', line 51

def title
  @params["title"]
end

#typeObject



47
48
49
# File 'lib/ferrum/target.rb', line 47

def type
  @params["type"]
end

#update(params) ⇒ Object



22
23
24
# File 'lib/ferrum/target.rb', line 22

def update(params)
  @params.merge!(params)
end

#urlObject



55
56
57
# File 'lib/ferrum/target.rb', line 55

def url
  @params["url"]
end

#window?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/ferrum/target.rb', line 67

def window?
  !!opener_id
end