diff options
Diffstat (limited to 'spec/support/capybara_slow_finder.rb')
-rw-r--r-- | spec/support/capybara_slow_finder.rb | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/spec/support/capybara_slow_finder.rb b/spec/support/capybara_slow_finder.rb new file mode 100644 index 00000000000..975ddd52c1f --- /dev/null +++ b/spec/support/capybara_slow_finder.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +module Capybara + MESSAGE = <<~MSG + Timeout (%{timeout}s) reached while running a waiting Capybara finder. + Consider using a non-waiting finder. + + See https://www.cloudbees.com/blog/faster-rails-tests + MSG + + module Node + class Base + # Inspired by https://github.com/ngauthier/capybara-slow_finder_errors + module SlowFinder + def synchronize(seconds = nil, errors: nil) + start_time = Gitlab::Metrics::System.monotonic_time + + super + rescue Capybara::ElementNotFound => e + seconds ||= Capybara.default_max_wait_time + + raise e unless seconds > 0 && Gitlab::Metrics::System.monotonic_time - start_time > seconds + + message = format(MESSAGE, timeout: seconds) + raise e, "#{$!}\n\n#{message}", e.backtrace + end + end + + prepend SlowFinder + end + end +end |