From b0abca0bdce63e5b6c88a35125a5dfc1931c780d Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 24 Jun 2024 18:23:03 +0200 Subject: [PATCH] Additional logging for flaky end-to-end tests --- spec/support/capybara.rb | 1 + spec/support/javascript_errors.rb | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/spec/support/capybara.rb b/spec/support/capybara.rb index be1378ffac..c456cf9964 100644 --- a/spec/support/capybara.rb +++ b/spec/support/capybara.rb @@ -14,6 +14,7 @@ Capybara.register_driver :headless_chrome do |app| options = Selenium::WebDriver::Chrome::Options.new options.add_argument '--headless=new' options.add_argument '--window-size=1680,1050' + options.add_option('goog:loggingPrefs', { performance: 'ALL' }) Capybara::Selenium::Driver.new( app, diff --git a/spec/support/javascript_errors.rb b/spec/support/javascript_errors.rb index 28a43b3b8a..5806f11c1d 100644 --- a/spec/support/javascript_errors.rb +++ b/spec/support/javascript_errors.rb @@ -2,7 +2,18 @@ RSpec.configure do |config| config.after(:each, :js, type: :system) do + performance_logs = page.driver.browser.logs.get(:performance).map(&:message) errors = page.driver.browser.logs.get(:browser) + + # Save performance logs to capybara directory for further inspection + if performance_logs.present? && errors.present? && errors.any? { |error| error.level == 'SEVERE' } + path = File.join(Capybara.save_path, "performance-log-#{SecureRandom.hex(10)}.json") + + warn "WARN: saving performance logs to #{path}" + + File.write(path, "[#{performance_logs.join(',')}]") + end + if errors.present? aggregate_failures 'javascript errrors' do errors.each do |error|