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/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, Runtime
Classes: Client, Page, Process, Targets, WebSocket
Constant Summary
collapse
- TIMEOUT =
5
- EXTENSIONS =
[
File.expand_path("browser/javascripts/index.js", __dir__)
].freeze
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
-
#accept_confirm ⇒ Object
-
#accept_prompt(response) ⇒ Object
-
#add_header(header, permanent: true) ⇒ Object
-
#add_headers(headers, permanent: true) ⇒ Object
-
#clear_cookies ⇒ Object
-
#clear_memory_cache ⇒ Object
-
#command(*args) ⇒ Object
-
#cookies ⇒ Object
-
#crash ⇒ Object
-
#delete_text(node) ⇒ Object
-
#dismiss_confirm ⇒ Object
-
#dismiss_prompt ⇒ Object
-
#extensions ⇒ Object
-
#find(method, selector) ⇒ Object
-
#find_within(node, method, selector) ⇒ Object
-
#initialize(options = nil) ⇒ Browser
constructor
A new instance of Browser.
-
#modal_message ⇒ Object
-
#page_settings=(settings) ⇒ Object
-
#parents(node) ⇒ Object
-
#quit ⇒ Object
-
#remove_cookie(options) ⇒ Object
-
#render(path, _options = {}) ⇒ Object
-
#render_base64(format = "png", _options = {}) ⇒ Object
-
#reset ⇒ Object
-
#restart ⇒ Object
-
#select_file(node, value) ⇒ Object
-
#set_cookie(cookie) ⇒ Object
-
#set_http_auth(user, password) ⇒ Object
-
#set_overrides(user_agent: nil, accept_language: nil, platform: nil) ⇒ Object
-
#set_paper_size(size) ⇒ Object
-
#set_proxy(ip, port, type, user, password) ⇒ Object
-
#set_zoom_factor(zoom_factor) ⇒ Object
-
#source ⇒ Object
-
#targets ⇒ Object
-
#url_blacklist=(blacklist) ⇒ Object
-
#url_whitelist=(whitelist) ⇒ Object
-
#visible_text(node) ⇒ Object
Constructor Details
#initialize(options = nil) ⇒ Browser
Returns a new instance of Browser.
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/capybara/cuprite/browser.rb', line 39
def initialize(options = nil)
@options = Hash(options)
@logger, @timeout = @options.values_at(:logger, :timeout)
if ENV["CUPRITE_DEBUG"]
STDOUT.sync = true
@logger = STDOUT
end
start
end
|
Instance Attribute Details
Returns the value of attribute headers.
19
20
21
|
# File 'lib/capybara/cuprite/browser.rb', line 19
def
@headers
end
|
#logger ⇒ Object
Returns the value of attribute logger.
36
37
38
|
# File 'lib/capybara/cuprite/browser.rb', line 36
def logger
@logger
end
|
#process ⇒ Object
Returns the value of attribute process.
36
37
38
|
# File 'lib/capybara/cuprite/browser.rb', line 36
def process
@process
end
|
#timeout ⇒ Object
58
59
60
|
# File 'lib/capybara/cuprite/browser.rb', line 58
def timeout
@timeout || TIMEOUT
end
|
Class Method Details
.start(*args) ⇒ Object
21
22
23
|
# File 'lib/capybara/cuprite/browser.rb', line 21
def self.start(*args)
new(*args)
end
|
Instance Method Details
#accept_confirm ⇒ Object
198
199
200
|
# File 'lib/capybara/cuprite/browser.rb', line 198
def accept_confirm
raise NotImplementedError
end
|
#accept_prompt(response) ⇒ Object
206
207
208
|
# File 'lib/capybara/cuprite/browser.rb', line 206
def accept_prompt(response)
raise NotImplementedError
end
|
145
146
147
|
# File 'lib/capybara/cuprite/browser.rb', line 145
def (, permanent: true)
(, permanent: permanent)
end
|
131
132
133
134
135
136
137
138
139
140
141
142
143
|
# File 'lib/capybara/cuprite/browser.rb', line 131
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
|
#clear_cookies ⇒ Object
171
172
173
|
# File 'lib/capybara/cuprite/browser.rb', line 171
def clear_cookies
page.command("Network.clearBrowserCookies")
end
|
#clear_memory_cache ⇒ Object
194
195
196
|
# File 'lib/capybara/cuprite/browser.rb', line 194
def clear_memory_cache
page.command("Network.clearBrowserCache")
end
|
#command(*args) ⇒ Object
238
239
240
241
242
243
244
|
# File 'lib/capybara/cuprite/browser.rb', line 238
def command(*args)
id = @client.command(*args)
@client.wait(id: id)
rescue DeadBrowser
restart
raise
end
|
#cookies ⇒ Object
158
159
160
161
|
# File 'lib/capybara/cuprite/browser.rb', line 158
def cookies
cookies = page.command("Network.getAllCookies")["cookies"]
cookies.map { |c| [c["name"], Cookie.new(c)] }.to_h
end
|
#crash ⇒ Object
234
235
236
|
# File 'lib/capybara/cuprite/browser.rb', line 234
def crash
command("Browser.crash")
end
|
#delete_text(node) ⇒ Object
93
94
95
|
# File 'lib/capybara/cuprite/browser.rb', line 93
def delete_text(node)
evaluate_on(node: node, expr: "_cuprite.deleteText(this)")
end
|
#dismiss_confirm ⇒ Object
202
203
204
|
# File 'lib/capybara/cuprite/browser.rb', line 202
def dismiss_confirm
raise NotImplementedError
end
|
#dismiss_prompt ⇒ Object
210
211
212
|
# File 'lib/capybara/cuprite/browser.rb', line 210
def dismiss_prompt
raise NotImplementedError
end
|
#extensions ⇒ Object
51
52
53
54
55
56
|
# File 'lib/capybara/cuprite/browser.rb', line 51
def extensions
@extensions ||= begin
exts = @options.fetch(:extensions, [])
(EXTENSIONS + exts).map { |p| File.read(p) }
end
end
|
#find(method, selector) ⇒ Object
70
71
72
|
# File 'lib/capybara/cuprite/browser.rb', line 70
def find(method, selector)
find_all(method, selector)
end
|
#find_within(node, method, selector) ⇒ Object
74
75
76
77
78
|
# File 'lib/capybara/cuprite/browser.rb', line 74
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
|
#modal_message ⇒ Object
214
215
216
|
# File 'lib/capybara/cuprite/browser.rb', line 214
def modal_message
raise NotImplementedError
end
|
#page_settings=(settings) ⇒ Object
179
180
181
|
# File 'lib/capybara/cuprite/browser.rb', line 179
def page_settings=(settings)
raise NotImplementedError
end
|
#parents(node) ⇒ Object
66
67
68
|
# File 'lib/capybara/cuprite/browser.rb', line 66
def parents(node)
evaluate_on(node: node, expr: "_cuprite.parents(this)", by_value: false)
end
|
#quit ⇒ Object
228
229
230
231
232
|
# File 'lib/capybara/cuprite/browser.rb', line 228
def quit
@client.close
@process.stop
@client = @process = @targets = nil
end
|
#remove_cookie(options) ⇒ Object
167
168
169
|
# File 'lib/capybara/cuprite/browser.rb', line 167
def remove_cookie(options)
page.command("Network.deleteCookies", **options)
end
|
#render(path, _options = {}) ⇒ Object
101
102
103
104
105
106
|
# File 'lib/capybara/cuprite/browser.rb', line 101
def render(path, _options = {})
data = Base64.decode64(render_base64)
File.open(path.to_s, "wb") { |f| f.write(data) }
end
|
#render_base64(format = "png", _options = {}) ⇒ Object
108
109
110
111
112
|
# File 'lib/capybara/cuprite/browser.rb', line 108
def render_base64(format = "png", _options = {})
page.command("Page.captureScreenshot", format: format)["data"]
end
|
#reset ⇒ Object
218
219
220
221
|
# File 'lib/capybara/cuprite/browser.rb', line 218
def reset
@headers = {}
targets.reset
end
|
#restart ⇒ Object
223
224
225
226
|
# File 'lib/capybara/cuprite/browser.rb', line 223
def restart
quit
start
end
|
#select_file(node, value) ⇒ Object
97
98
99
|
# File 'lib/capybara/cuprite/browser.rb', line 97
def select_file(node, value)
raise NotImplementedError
end
|
#set_cookie(cookie) ⇒ Object
163
164
165
|
# File 'lib/capybara/cuprite/browser.rb', line 163
def set_cookie(cookie)
page.command("Network.setCookie", **cookie)
end
|
#set_http_auth(user, password) ⇒ Object
175
176
177
|
# File 'lib/capybara/cuprite/browser.rb', line 175
def set_http_auth(user, password)
raise NotImplementedError
end
|
#set_overrides(user_agent: nil, accept_language: nil, platform: nil) ⇒ Object
149
150
151
152
153
154
155
156
|
# File 'lib/capybara/cuprite/browser.rb', line 149
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
118
119
120
|
# File 'lib/capybara/cuprite/browser.rb', line 118
def set_paper_size(size)
raise NotImplementedError
end
|
#set_proxy(ip, port, type, user, password) ⇒ Object
122
123
124
|
# File 'lib/capybara/cuprite/browser.rb', line 122
def set_proxy(ip, port, type, user, password)
raise NotImplementedError
end
|
#set_zoom_factor(zoom_factor) ⇒ Object
114
115
116
|
# File 'lib/capybara/cuprite/browser.rb', line 114
def set_zoom_factor(zoom_factor)
raise NotImplementedError
end
|
#source ⇒ Object
62
63
64
|
# File 'lib/capybara/cuprite/browser.rb', line 62
def source
raise NotImplementedError
end
|
#targets ⇒ Object
246
247
248
|
# File 'lib/capybara/cuprite/browser.rb', line 246
def targets
@targets ||= Targets.new(self)
end
|
#url_blacklist=(blacklist) ⇒ Object
188
189
190
191
192
|
# File 'lib/capybara/cuprite/browser.rb', line 188
def url_blacklist=(blacklist)
@url_blacklist = Array(blacklist).map { |p| { urlPattern: p.include?("*") ? p : "*#{p}*" } }
page.command("Network.setRequestInterception", patterns: @url_blacklist)
end
|
#url_whitelist=(whitelist) ⇒ Object
183
184
185
186
|
# File 'lib/capybara/cuprite/browser.rb', line 183
def url_whitelist=(whitelist)
@url_whitelist = Array(whitelist).map { |p| { urlPattern: p } }
page.command("Network.setRequestInterception", patterns: @url_whitelist)
end
|
#visible_text(node) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/capybara/cuprite/browser.rb', line 80
def visible_text(node)
begin
evaluate_on(node: node, expr: "_cuprite.visibleText(this)")
rescue BrowserError => e
if e.message == "No node with given id found"
raise ObsoleteNode.new(self, e.response)
end
raise
end
end
|