Class: Capybara::Cuprite::Browser
- Inherits:
-
Object
- Object
- Capybara::Cuprite::Browser
show all
- Extended by:
- Forwardable
- Defined in:
- lib/capybara/cuprite/browser.rb,
lib/capybara/cuprite/browser/dom.rb,
lib/capybara/cuprite/browser/net.rb,
lib/capybara/cuprite/browser/page.rb,
lib/capybara/cuprite/browser/frame.rb,
lib/capybara/cuprite/browser/input.rb,
lib/capybara/cuprite/browser/client.rb,
lib/capybara/cuprite/browser/process.rb,
lib/capybara/cuprite/browser/runtime.rb,
lib/capybara/cuprite/browser/targets.rb,
lib/capybara/cuprite/browser/web_socket.rb
Defined Under Namespace
Modules: DOM, Frame, Input, Net, Runtime
Classes: Client, Page, Process, Targets, WebSocket
Constant Summary
collapse
- TIMEOUT =
5
- WINDOW_SIZE =
[1024, 768].freeze
- EXTENSIONS =
[
File.expand_path("browser/javascripts/index.js", __dir__)
].freeze
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
-
#add_header(header, permanent: true) ⇒ Object
-
#add_headers(headers, permanent: true) ⇒ Object
-
#browser_error ⇒ Object
-
#clear_cookies ⇒ Object
-
#clear_memory_cache ⇒ Object
-
#command(*args) ⇒ Object
-
#cookies ⇒ Object
-
#crash ⇒ Object
-
#delete_text(node) ⇒ Object
-
#extensions ⇒ Object
-
#find(method, selector) ⇒ Object
-
#find_within(node, method, selector) ⇒ Object
-
#initialize(options = nil) ⇒ Browser
constructor
A new instance of Browser.
-
#parents(node) ⇒ Object
-
#quit ⇒ Object
-
#remove_cookie(options) ⇒ Object
-
#render(path, options = {}) ⇒ Object
-
#render_base64(format, options = {}) ⇒ Object
-
#reset ⇒ Object
-
#resize(**options) ⇒ Object
-
#restart ⇒ Object
-
#select_file(node, value) ⇒ Object
-
#set_cookie(cookie) ⇒ Object
-
#set_overrides(user_agent: nil, accept_language: nil, platform: nil) ⇒ Object
-
#set_paper_size(size) ⇒ Object
-
#set_zoom_factor(zoom_factor) ⇒ Object
-
#source ⇒ Object
-
#targets ⇒ Object
-
#visible_text(node) ⇒ Object
Constructor Details
#initialize(options = nil) ⇒ Browser
Returns a new instance of Browser.
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/capybara/cuprite/browser.rb', line 43
def initialize(options = nil)
options ||= {}
@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]
self.url_blacklist = @options[:url_blacklist]
self.url_whitelist = @options[:url_whitelist]
if ENV["CUPRITE_DEBUG"] && !@logger
STDOUT.sync = true
@logger = STDOUT
@options[:logger] = @logger
end
@options.freeze
start
end
|
Instance Attribute Details
Returns the value of attribute headers.
20
21
22
|
# File 'lib/capybara/cuprite/browser.rb', line 20
def
@headers
end
|
#js_errors ⇒ Object
Returns the value of attribute js_errors.
39
40
41
|
# File 'lib/capybara/cuprite/browser.rb', line 39
def js_errors
@js_errors
end
|
#logger ⇒ Object
Returns the value of attribute logger.
39
40
41
|
# File 'lib/capybara/cuprite/browser.rb', line 39
def logger
@logger
end
|
#process ⇒ Object
Returns the value of attribute process.
39
40
41
|
# File 'lib/capybara/cuprite/browser.rb', line 39
def process
@process
end
|
#slowmo ⇒ Object
Returns the value of attribute slowmo.
39
40
41
|
# File 'lib/capybara/cuprite/browser.rb', line 39
def slowmo
@slowmo
end
|
#timeout ⇒ Object
75
76
77
|
# File 'lib/capybara/cuprite/browser.rb', line 75
def timeout
@timeout || TIMEOUT
end
|
#url_blacklist ⇒ Object
Returns the value of attribute url_blacklist.
39
40
41
|
# File 'lib/capybara/cuprite/browser.rb', line 39
def url_blacklist
@url_blacklist
end
|
#url_whitelist ⇒ Object
Returns the value of attribute url_whitelist.
39
40
41
|
# File 'lib/capybara/cuprite/browser.rb', line 39
def url_whitelist
@url_whitelist
end
|
#window_size ⇒ Object
Returns the value of attribute window_size.
20
21
22
|
# File 'lib/capybara/cuprite/browser.rb', line 20
def window_size
@window_size
end
|
Class Method Details
.start(*args) ⇒ Object
22
23
24
|
# File 'lib/capybara/cuprite/browser.rb', line 22
def self.start(*args)
new(*args)
end
|
Instance Method Details
157
158
159
|
# File 'lib/capybara/cuprite/browser.rb', line 157
def (, permanent: true)
(, permanent: permanent)
end
|
143
144
145
146
147
148
149
150
151
152
153
154
155
|
# File 'lib/capybara/cuprite/browser.rb', line 143
def (, permanent: true)
if ["Referer"]
page.referrer = ["Referer"]
.delete("Referer") unless permanent
end
@headers.merge!()
user_agent = @headers["User-Agent"]
accept_language = @headers["Accept-Language"]
set_overrides(user_agent: user_agent, accept_language: accept_language)
page.command("Network.setExtraHTTPHeaders", headers: @headers)
end
|
#browser_error ⇒ Object
223
224
225
|
# File 'lib/capybara/cuprite/browser.rb', line 223
def browser_error
page.evaluate("_cuprite.browserError()")
end
|
#clear_cookies ⇒ Object
183
184
185
|
# File 'lib/capybara/cuprite/browser.rb', line 183
def clear_cookies
page.command("Network.clearBrowserCookies")
end
|
#clear_memory_cache ⇒ Object
197
198
199
|
# File 'lib/capybara/cuprite/browser.rb', line 197
def clear_memory_cache
page.command("Network.clearBrowserCache")
end
|
#command(*args) ⇒ Object
232
233
234
235
236
237
238
|
# File 'lib/capybara/cuprite/browser.rb', line 232
def command(*args)
id = @client.command(*args)
@client.wait(id: id)
rescue DeadBrowser
restart
raise
end
|
#cookies ⇒ Object
170
171
172
173
|
# File 'lib/capybara/cuprite/browser.rb', line 170
def cookies
cookies = page.command("Network.getAllCookies")["cookies"]
cookies.map { |c| [c["name"], Cookie.new(c)] }.to_h
end
|
#crash ⇒ Object
219
220
221
|
# File 'lib/capybara/cuprite/browser.rb', line 219
def crash
command("Browser.crash")
end
|
#delete_text(node) ⇒ Object
101
102
103
|
# File 'lib/capybara/cuprite/browser.rb', line 101
def delete_text(node)
evaluate_on(node: node, expr: "_cuprite.deleteText(this)")
end
|
#extensions ⇒ Object
68
69
70
71
72
73
|
# File 'lib/capybara/cuprite/browser.rb', line 68
def extensions
@extensions ||= begin
exts = @options.fetch(:extensions, [])
(EXTENSIONS + exts).map { |p| File.read(p) }
end
end
|
#find(method, selector) ⇒ Object
87
88
89
|
# File 'lib/capybara/cuprite/browser.rb', line 87
def find(method, selector)
find_all(method, selector)
end
|
#find_within(node, method, selector) ⇒ Object
91
92
93
94
95
|
# File 'lib/capybara/cuprite/browser.rb', line 91
def find_within(node, method, selector)
resolved = page.command("DOM.resolveNode", nodeId: node["nodeId"])
object_id = resolved.dig("object", "objectId")
find_all(method, selector, { "objectId" => object_id })
end
|
#parents(node) ⇒ Object
83
84
85
|
# File 'lib/capybara/cuprite/browser.rb', line 83
def parents(node)
evaluate_on(node: node, expr: "_cuprite.parents(this)", by_value: false)
end
|
#quit ⇒ Object
213
214
215
216
217
|
# File 'lib/capybara/cuprite/browser.rb', line 213
def quit
@client.close
@process.stop
@client = @process = @targets = nil
end
|
#remove_cookie(options) ⇒ Object
179
180
181
|
# File 'lib/capybara/cuprite/browser.rb', line 179
def remove_cookie(options)
page.command("Network.deleteCookies", **options)
end
|
#render(path, options = {}) ⇒ Object
109
110
111
112
113
114
|
# File 'lib/capybara/cuprite/browser.rb', line 109
def render(path, options = {})
format = options.delete(:format)
options = options.merge(path: path)
bin = Base64.decode64(render_base64(format, options))
File.open(path.to_s, "wb") { |f| f.write(bin) }
end
|
#render_base64(format, options = {}) ⇒ Object
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# File 'lib/capybara/cuprite/browser.rb', line 116
def render_base64(format, options = {})
options = render_options(format, options)
if options[:format].to_s == "pdf"
options = {}
options[:paperWidth] = @paper_size[:width].to_f if @paper_size
options[:paperHeight] = @paper_size[:height].to_f if @paper_size
options[:scale] = @zoom_factor if @zoom_factor
page.command("Page.printToPDF", **options)
else
page.command("Page.captureScreenshot", **options)
end.fetch("data")
end
|
#reset ⇒ Object
201
202
203
204
205
206
|
# File 'lib/capybara/cuprite/browser.rb', line 201
def reset
@headers = {}
@zoom_factor = nil
@window_size = @original_window_size
targets.reset
end
|
#resize(**options) ⇒ Object
227
228
229
230
|
# File 'lib/capybara/cuprite/browser.rb', line 227
def resize(**options)
@window_size = [options[:width], options[:height]]
page.resize(**options)
end
|
#restart ⇒ Object
208
209
210
211
|
# File 'lib/capybara/cuprite/browser.rb', line 208
def restart
quit
start
end
|
#select_file(node, value) ⇒ Object
105
106
107
|
# File 'lib/capybara/cuprite/browser.rb', line 105
def select_file(node, value)
page.command("DOM.setFileInputFiles", nodeId: node["nodeId"], files: Array(value))
end
|
#set_cookie(cookie) ⇒ Object
175
176
177
|
# File 'lib/capybara/cuprite/browser.rb', line 175
def set_cookie(cookie)
page.command("Network.setCookie", **cookie)
end
|
#set_overrides(user_agent: nil, accept_language: nil, platform: nil) ⇒ Object
161
162
163
164
165
166
167
168
|
# File 'lib/capybara/cuprite/browser.rb', line 161
def set_overrides(user_agent: nil, accept_language: nil, platform: nil)
options = Hash.new
options[:userAgent] = user_agent if user_agent
options[:acceptLanguage] = accept_language if accept_language
options[:platform] if platform
page.command("Network.setUserAgentOverride", **options) if !options.empty?
end
|
#set_paper_size(size) ⇒ Object
134
135
136
|
# File 'lib/capybara/cuprite/browser.rb', line 134
def set_paper_size(size)
@paper_size = size
end
|
#set_zoom_factor(zoom_factor) ⇒ Object
130
131
132
|
# File 'lib/capybara/cuprite/browser.rb', line 130
def set_zoom_factor(zoom_factor)
@zoom_factor = zoom_factor.to_f
end
|
#source ⇒ Object
79
80
81
|
# File 'lib/capybara/cuprite/browser.rb', line 79
def source
raise NotImplementedError
end
|
#targets ⇒ Object
240
241
242
|
# File 'lib/capybara/cuprite/browser.rb', line 240
def targets
@targets ||= Targets.new(self)
end
|
#visible_text(node) ⇒ Object
97
98
99
|
# File 'lib/capybara/cuprite/browser.rb', line 97
def visible_text(node)
evaluate_on(node: node, expr: "_cuprite.visibleText(this)")
end
|