From edd85196ac7bdf6b6e008aaba5a2702ad96e6e5c Mon Sep 17 00:00:00 2001 From: "Ken C. Demanawa" Date: Tue, 14 Jul 2026 10:06:51 +0800 Subject: [PATCH] Include console type and stack trace in logger output - Log Runtime.consoleAPICalled entries with their console API type and stack frames so logger output preserves useful context beyond argument values. --- lib/ferrum/page.rb | 12 +++++++++++- spec/browser_spec.rb | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/ferrum/page.rb b/lib/ferrum/page.rb index 2e58c2b9..4efc0792 100644 --- a/lib/ferrum/page.rb +++ b/lib/ferrum/page.rb @@ -436,7 +436,7 @@ def subscribe if @options.logger on("Runtime.consoleAPICalled") do |params| - params["args"].each { |r| @options.logger.puts(r["value"]) } + log_console_api(params) end end @@ -493,6 +493,16 @@ def prepare_page document_node_id end + def log_console_api(params) + message = params.fetch("args", []).filter_map { |arg| arg["value"] || arg["description"] }.join(" ") + @options.logger.puts("[#{params['type']}] #{message}") + + params.dig("stackTrace", "callFrames")&.each do |frame| + location = "#{frame['url']}:#{frame['lineNumber'].to_i + 1}:#{frame['columnNumber'].to_i + 1}" + @options.logger.puts(" at #{frame['functionName']} (#{location})") + end + end + def inject_extensions @options.extensions.each do |extension| # https://github.com/GoogleChrome/puppeteer/issues/1443 diff --git a/spec/browser_spec.rb b/spec/browser_spec.rb index 41eab418..3027c548 100644 --- a/spec/browser_spec.rb +++ b/spec/browser_spec.rb @@ -45,6 +45,9 @@ browser = Ferrum::Browser.new(logger: logger) browser.go_to(base_url("/console_log")) expect(logger.string).to include("Hello world") + expect(logger.string).to include("[log] Hello world") + expect(logger.string).to include("at window.onload") + expect(logger.string).to include("/console_log") ensure browser&.quit end