@@ -6,7 +6,6 @@ module Capybara::Cuprite
6
6
class Browser < Ferrum ::Browser
7
7
extend Forwardable
8
8
9
- delegate %i[ find_or_create_page ] => :targets
10
9
delegate %i[ send_keys select set hover trigger before_click switch_to_frame
11
10
find_modal accept_confirm dismiss_confirm accept_prompt
12
11
dismiss_prompt reset_modals ] => :page
@@ -19,6 +18,22 @@ def initialize(options = nil)
19
18
self . url_whitelist = options [ :url_whitelist ]
20
19
21
20
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
22
37
end
23
38
24
39
def url_whitelist = ( patterns )
@@ -53,16 +68,46 @@ def find_within(node, method, selector)
53
68
find_all ( method , selector , { "objectId" => object_id } )
54
69
end
55
70
71
+ def window_handle
72
+ page . target_id
73
+ end
74
+
75
+ def window_handles
76
+ targets . keys
77
+ end
78
+
56
79
def within_window ( locator = nil , &block )
80
+ original = window_handle
81
+
57
82
if Capybara ::VERSION . to_f < 3.0
58
83
target_id = window_handles . find do |target_id |
59
- page = find_or_create_page ( target_id )
84
+ page = targets [ target_id ] . page
60
85
locator == page . frame_name
61
86
end
62
87
locator = target_id if target_id
63
88
end
64
89
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
66
111
end
67
112
68
113
def browser_error
0 commit comments