diff --git a/spec/features/users/sign_in_spec.rb b/spec/features/users/sign_in_spec.rb index fe0424f8c84..36636a8dbc7 100644 --- a/spec/features/users/sign_in_spec.rb +++ b/spec/features/users/sign_in_spec.rb @@ -1,8 +1,6 @@ require 'rails_helper' feature 'Sign in' do - include JavascriptDriverHelper - before(:all) do @original_capyabara_wait = Capybara.default_max_wait_time Capybara.default_max_wait_time = 5 @@ -223,9 +221,11 @@ visit new_user_session_path - with_awaited_fetch do - check t('components.password_toggle.toggle_label') - end + check t('components.password_toggle.toggle_label') + + # Clicking the checkbox triggers a frontend event logging request. Wait for network requests to + # settle before continuing to avoid a race condition. + Capybara.current_session.server.wait_for_pending_requests expect(page).to have_css('input.password[type="text"]') expect(fake_analytics).to have_logged_event( diff --git a/spec/support/features/javascript_driver_helper.rb b/spec/support/features/javascript_driver_helper.rb index e568f3669c1..151067296e3 100644 --- a/spec/support/features/javascript_driver_helper.rb +++ b/spec/support/features/javascript_driver_helper.rb @@ -2,25 +2,4 @@ module JavascriptDriverHelper def javascript_enabled? %i[headless_chrome headless_chrome_mobile].include?(Capybara.current_driver) end - - def with_awaited_fetch - setup_js = <<~JS - window._fetch = window.fetch; - window.fetch = async (...args) => { - window.isFetching = true; - const result = await window._fetch.call(window, ...args); - window.isFetching = false; - return result; - }; - JS - teardown_js = 'window.fetch = window._fetch; delete window._fetch;' - - page.execute_script(setup_js) - yield - Timeout.timeout(Capybara.default_max_wait_time) do - loop if page.evaluate_script('window.isFetching') - end - ensure - page.execute_script(teardown_js) - end end