diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bed814..2d025e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ ### Changed ### Fixed +- `Driver#reset!` kept the page it had cached when the browser failed to reset, so every later example raised + `Session with given id not found` or `Browser is dead or given window is closed` instead of starting on a fresh + page [#274], [rubycdp/ferrum#641] ### Removed diff --git a/lib/capybara/cuprite/browser.rb b/lib/capybara/cuprite/browser.rb index 5b68448..d127b0c 100644 --- a/lib/capybara/cuprite/browser.rb +++ b/lib/capybara/cuprite/browser.rb @@ -38,6 +38,7 @@ def page def reset super + ensure @options.reset_window_size @page = nil end diff --git a/lib/capybara/cuprite/driver.rb b/lib/capybara/cuprite/driver.rb index 2e31d4c..2214383 100644 --- a/lib/capybara/cuprite/driver.rb +++ b/lib/capybara/cuprite/driver.rb @@ -139,6 +139,7 @@ def reset! browser.url_whitelist = @options[:url_whitelist] browser.raise_on_unhandled_modal = @options.fetch(:raise_on_unhandled_modal, false) browser.reset + ensure @started = false end diff --git a/spec/lib/driver_spec.rb b/spec/lib/driver_spec.rb index fc07e5a..e92ae21 100644 --- a/spec/lib/driver_spec.rb +++ b/spec/lib/driver_spec.rb @@ -20,6 +20,22 @@ end end + describe "#reset!" do + it "drops the cached page even when the browser fails to reset" do + driver = described_class.new(nil) + driver.visit("about:blank") + allow(driver.browser.contexts).to receive(:reset).and_wrap_original do |reset| + reset.call + raise Ferrum::TimeoutError + end + + expect { driver.reset! }.to raise_error(Ferrum::TimeoutError) + expect { driver.visit("about:blank") }.not_to raise_error + ensure + driver&.quit + end + end + describe "save_path configuration" do it "defaults to the Capybara save path" do driver = with_capybara_save_path("/tmp/capybara-save-path") do