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 + + + + + Test with Iframe + + + + + + + HTML + end + get '/base/with_base' do <<-HTML diff --git a/spec/rspec_spec.rb b/spec/rspec_spec.rb index a95e43f2..b334b828 100644 --- a/spec/rspec_spec.rb +++ b/spec/rspec_spec.rb @@ -15,7 +15,7 @@ RSpec.describe 'capybara/rspec' do expect(self.class.ancestors).to include Capybara::RSpecMatcherProxies end - context 'resetting session' do + context 'resetting session', order: :defined do it 'sets a cookie in one example...' do visit('/set_cookie') expect(page.body).to include('Cookie set to test_cookie') @@ -27,7 +27,7 @@ RSpec.describe 'capybara/rspec' do end end - context 'setting the current driver' do + context 'setting the current driver', order: :defined do it 'sets the current driver in one example...' do Capybara.current_driver = :selenium end