Module: BrowserConsoleLogger

Defined in:
lib/panda/core/testing/support/system/browser_console_logger.rb

Overview

Capture and log browser console output for debugging CI failures

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/panda/core/testing/support/system/browser_console_logger.rb', line 5

def self.included(base)
  base.after do |example|
    # Only log console in CI when test fails
    next unless ENV["CI"] && example.exception

    if respond_to?(:page) && page.driver.is_a?(Capybara::Cuprite::Driver)
      begin
        # Access the console logger via the CupriteSetup module
        console_logger = Panda::Core::Testing::CupriteSetup.console_logger

        unless console_logger
          puts "\n⚠️  Console logger not available"
          next
        end

        console_logs = console_logger.logs

        if console_logs.any?
          puts "\n" + "=" * 80
          puts "BROWSER CONSOLE OUTPUT (#{console_logs.length} messages)"
          puts "=" * 80

          console_logs.each_with_index do |msg, index|
            level = msg.level.downcase
            type_icon = case level
            when "error" then ""
            when "warning" then "⚠️"
            when "info" then "ℹ️"
            else "📝"
            end

            puts "#{index + 1}. #{type_icon} #{msg}"
            puts ""
          end

          puts "=" * 80
        else
          puts "\n⚠️  No console messages captured (browser may not have started)"
        end
      rescue => e
        puts "\n⚠️  Failed to capture console logs: #{e.message}"
        puts "   #{e.class}: #{e.backtrace.first(3).join("\n   ")}" if ENV["DEBUG"]
      end
    end
  end
end