Skip to content

Commit ffee82e

Browse files
authored
Merge pull request #103 from machinio/add-contexts
Use ferrum contexts
2 parents 041729c + 99571b2 commit ffee82e

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed

lib/capybara/cuprite/browser.rb

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ module Capybara::Cuprite
66
class Browser < Ferrum::Browser
77
extend Forwardable
88

9-
delegate %i[find_or_create_page] => :targets
109
delegate %i[send_keys select set hover trigger before_click switch_to_frame
1110
find_modal accept_confirm dismiss_confirm accept_prompt
1211
dismiss_prompt reset_modals] => :page
@@ -19,6 +18,22 @@ def initialize(options = nil)
1918
self.url_whitelist = options[:url_whitelist]
2019

2120
super
21+
@page = false
22+
end
23+
24+
def page
25+
raise Ferrum::NoSuchPageError if @page.nil?
26+
@page ||= default_context.page
27+
end
28+
29+
def reset
30+
super
31+
@page = default_context.page
32+
end
33+
34+
def quit
35+
super
36+
@page = false
2237
end
2338

2439
def url_whitelist=(patterns)
@@ -53,16 +68,46 @@ def find_within(node, method, selector)
5368
find_all(method, selector, { "objectId" => object_id })
5469
end
5570

71+
def window_handle
72+
page.target_id
73+
end
74+
75+
def window_handles
76+
targets.keys
77+
end
78+
5679
def within_window(locator = nil, &block)
80+
original = window_handle
81+
5782
if Capybara::VERSION.to_f < 3.0
5883
target_id = window_handles.find do |target_id|
59-
page = find_or_create_page(target_id)
84+
page = targets[target_id].page
6085
locator == page.frame_name
6186
end
6287
locator = target_id if target_id
6388
end
6489

65-
targets.within_window(locator, &block)
90+
if window_handles.include?(locator)
91+
switch_to_window(locator)
92+
yield
93+
else
94+
raise Ferrum::NoSuchPageError
95+
end
96+
ensure
97+
switch_to_window(original)
98+
end
99+
100+
def switch_to_window(target_id)
101+
target = targets[target_id]
102+
raise Ferrum::NoSuchPageError unless target
103+
@page = target.page
104+
end
105+
106+
def close_window(target_id)
107+
target = targets[target_id]
108+
raise Ferrum::NoSuchPageError unless target
109+
@page = nil if @page == target.page
110+
target.page.close
66111
end
67112

68113
def browser_error

lib/capybara/cuprite/driver.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def close_window(handle)
129129
end
130130

131131
def open_new_window
132-
browser.open_new_window
132+
browser.create_page
133133
end
134134

135135
def switch_to_window(handle)
@@ -141,7 +141,7 @@ def within_window(name, &block)
141141
end
142142

143143
def no_such_window_error
144-
Ferrum::NoSuchWindowError
144+
Ferrum::NoSuchPageError
145145
end
146146

147147
def reset!

0 commit comments

Comments
 (0)