Skip to content

Commit 2fe03fe

Browse files
committed
Fix #102 no more monkey patching
1 parent 88f28f0 commit 2fe03fe

File tree

4 files changed

+22
-16
lines changed

4 files changed

+22
-16
lines changed

lib/capybara/cuprite.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,12 @@
22

33
require "ferrum"
44
require "capybara"
5-
6-
module Capybara::Cuprite
7-
end
8-
95
require "capybara/cuprite/driver"
106
require "capybara/cuprite/browser"
117
require "capybara/cuprite/page"
128
require "capybara/cuprite/node"
139
require "capybara/cuprite/errors"
1410

15-
Ferrum::Page.prepend(Capybara::Cuprite::Page)
16-
1711
Capybara.register_driver(:cuprite) do |app|
1812
Capybara::Cuprite::Driver.new(app)
1913
end

lib/capybara/cuprite/browser.rb

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ def initialize(options = nil)
2323

2424
def page
2525
raise Ferrum::NoSuchPageError if @page.nil?
26-
@page ||= default_context.page
26+
@page ||= attach_page
2727
end
2828

2929
def reset
3030
super
31-
@page = default_context.page
31+
@page = attach_page
3232
end
3333

3434
def quit
@@ -81,7 +81,7 @@ def within_window(locator = nil, &block)
8181

8282
if Capybara::VERSION.to_f < 3.0
8383
target_id = window_handles.find do |target_id|
84-
page = targets[target_id].page
84+
page = attach_page(target_id)
8585
locator == page.frame_name
8686
end
8787
locator = target_id if target_id
@@ -100,13 +100,13 @@ def within_window(locator = nil, &block)
100100
def switch_to_window(target_id)
101101
target = targets[target_id]
102102
raise Ferrum::NoSuchPageError unless target
103-
@page = target.page
103+
@page = attach_page(target.id)
104104
end
105105

106106
def close_window(target_id)
107107
target = targets[target_id]
108108
raise Ferrum::NoSuchPageError unless target
109-
@page = nil if @page == target.page
109+
@page = nil if @page.target_id == target.id
110110
target.page.close
111111
end
112112

@@ -200,5 +200,15 @@ def prepare_wildcards(wc)
200200
end
201201
end
202202
end
203+
204+
def attach_page(target_id = nil)
205+
target = targets[target_id] if target_id
206+
target ||= default_context.default_target
207+
return target.page if target.attached?
208+
209+
target.maybe_sleep_if_new_window
210+
target.page = Page.new(target.id, self)
211+
target.page
212+
end
203213
end
204214
end

lib/capybara/cuprite/driver.rb

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

131131
def open_new_window
132-
browser.create_page
132+
target = browser.default_context.create_target
133+
target.maybe_sleep_if_new_window
134+
target.page = Page.new(target.id, browser)
135+
target.page
133136
end
134137

135138
def switch_to_window(handle)

lib/capybara/cuprite/page.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,14 @@
33
require "forwardable"
44

55
module Capybara::Cuprite
6-
module Page
6+
class Page < Ferrum::Page
77
MODAL_WAIT = ENV.fetch("CUPRITE_MODAL_WAIT", 0.05).to_f
88
TRIGGER_CLICK_WAIT = ENV.fetch("CUPRITE_TRIGGER_CLICK_WAIT", 0.1).to_f
99

1010
extend Forwardable
1111
delegate %i[at_css at_xpath css xpath
12-
current_url current_title body
13-
execution_id evaluate evaluate_on evaluate_async execute] => :active_frame
14-
12+
current_url current_title body execution_id
13+
evaluate evaluate_on evaluate_async execute] => :active_frame
1514

1615
def initialize(*args)
1716
@frame_stack = []

0 commit comments

Comments
 (0)