diff --git a/lib/capybara/session.rb b/lib/capybara/session.rb index d5a70e6a..0b458e56 100644 --- a/lib/capybara/session.rb +++ b/lib/capybara/session.rb @@ -130,6 +130,7 @@ module Capybara if @touched driver.reset! @touched = false + @scopes = [nil] end @server&.wait_for_pending_requests raise_server_error! diff --git a/lib/capybara/spec/session/reset_session_spec.rb b/lib/capybara/spec/session/reset_session_spec.rb index 28640e5a..018de555 100644 --- a/lib/capybara/spec/session/reset_session_spec.rb +++ b/lib/capybara/spec/session/reset_session_spec.rb @@ -95,6 +95,19 @@ Capybara::SpecHelper.spec '#reset_session!' do expect(@session.windows.size).to eq 1 end + it 'does not block opening a new window after a frame was switched to and not switched back', requires: [:windows] do + @session.visit('/with_iframe?id=test_iframe&url=/') + @session.switch_to_frame(@session.find(:frame, 'test_iframe')) + within_window_test = lambda do + @session.within_window(@session.open_new_window) do + @session.visit('/') + end + end + expect(&within_window_test).to raise_error(Capybara::ScopeError) + @session.reset_session! + expect(&within_window_test).not_to raise_error + end + context 'When reuse_server == false' do let!(:orig_reuse_server) { Capybara.reuse_server } diff --git a/lib/capybara/spec/test_app.rb b/lib/capybara/spec/test_app.rb index 48811c34..18b97f2a 100644 --- a/lib/capybara/spec/test_app.rb +++ b/lib/capybara/spec/test_app.rb @@ -177,6 +177,22 @@ class TestApp < Sinatra::Base HTML end + get '/with_iframe' do + <<-HTML + + +
+ +