SeleniumHQ / selenium

A browser automation framework and ecosystem.
https://selenium.dev
Apache License 2.0
29.74k stars 8.02k forks source link

[🐛 Bug]: log writing failed. log writing failed. "\xC2" from ASCII-8BIT to UTF-8 #14112

Closed mockdeep closed 2 weeks ago

mockdeep commented 3 weeks ago

What happened?

When I enable selenium logging in our Capybara test suite I get warnings about "log writing failed".

How can we reproduce the issue?

For me it happens when enabling logging for selenium:

Selenium::WebDriver.logger.level = :debug
Selenium::WebDriver.logger.output = Rails.root.join('log', 'selenium.log').to_s

# enable trace logging for geckodriver
Capybara.register_driver(:selenium) do |app|
  options = Selenium::WebDriver::Firefox::Options.new(log_level: :trace)
  Capybara::Selenium::Driver.new(app, browser: :firefox, options:)
end

# override warning to get a stack trace
module Warning

  def warn(msg)
    raise msg
  end

end

As soon as I call visit('/some/path') in Capybara it raises an error.

Relevant log output

RuntimeError:
            log writing failed. log writing failed. "\xC2" from ASCII-8BIT to UTF-8
          # ./spec/rails_helper.rb:6:in `warn'
          # /usr/local/lib/ruby/3.3.0/logger/log_device.rb:48:in `rescue in write'
          # /usr/local/lib/ruby/3.3.0/logger/log_device.rb:31:in `write'
          # /usr/local/lib/ruby/3.3.0/logger.rb:667:in `add'
          # ./vendor/bundle/ruby/3.3.0/gems/honeybadger-5.11.0/lib/honeybadger/breadcrumbs/logging.rb:21:in `add'
          # /usr/local/lib/ruby/3.3.0/logger.rb:691:in `debug'
          # ./vendor/bundle/ruby/3.3.0/gems/selenium-webdriver-4.21.1/lib/selenium/webdriver/common/logger.rb:211:in `discard_or_log'
          # ./vendor/bundle/ruby/3.3.0/gems/selenium-webdriver-4.21.1/lib/selenium/webdriver/common/logger.rb:119:in `debug'
          # ./vendor/bundle/ruby/3.3.0/gems/selenium-webdriver-4.21.1/lib/selenium/webdriver/remote/http/common.rb:96:in `create_response'
          # ./vendor/bundle/ruby/3.3.0/gems/selenium-webdriver-4.21.1/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
          # ./vendor/bundle/ruby/3.3.0/gems/selenium-webdriver-4.21.1/lib/selenium/webdriver/remote/http/common.rb:67:in `call'
          # ./vendor/bundle/ruby/3.3.0/gems/selenium-webdriver-4.21.1/lib/selenium/webdriver/remote/bridge.rb:630:in `execute'
          # ./vendor/bundle/ruby/3.3.0/gems/selenium-webdriver-4.21.1/lib/selenium/webdriver/remote/bridge.rb:478:in `element_text'
          # ./vendor/bundle/ruby/3.3.0/gems/selenium-webdriver-4.21.1/lib/selenium/webdriver/common/element.rb:190:in `text'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/selenium/node.rb:17:in `visible_text'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/element.rb:60:in `block in text'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/base.rb:77:in `synchronize'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/element.rb:60:in `text'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/document.rb:24:in `text'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/queries/text_query.rb:108:in `text'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/queries/text_query.rb:29:in `resolve_for'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/matchers.rb:887:in `block in _verify_text'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/base.rb:84:in `synchronize'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/matchers.rb:886:in `_verify_text'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/matchers.rb:701:in `assert_text'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/session.rb:774:in `assert_text'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/rspec/matchers/have_text.rb:10:in `element_matches?'
          # ./vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/rspec/matchers/base.rb:52:in `matches?'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:51:in `block in handle_matcher'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:27:in `with_matcher'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:65:in `to'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:101:in `to'
          # ./spec/support/accessibility_overrides.rb:11:in `visit'
          # ./spec/features/_flows/global_flow.rb:6:in `user_logs_in_as'
          # ./spec/features/form_admin_console/routed_forms_spec.rb:25:in `block (2 levels) in <top (required)>'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:626:in `block in run_around_example_hooks_for'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:352:in `call'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-rails-6.1.2/lib/rspec/rails/adapters.rb:75:in `block (2 levels) in <module:MinitestLifecycleAdapter>'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:457:in `instance_exec'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:457:in `instance_exec'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:390:in `execute_with'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:628:in `block (2 levels) in run_around_example_hooks_for'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:352:in `call'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:629:in `run_around_example_hooks_for'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:646:in `block in run_examples'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:642:in `map'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:642:in `run_examples'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:607:in `run'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block (3 levels) in run_specs'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `map'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block (2 levels) in run_specs'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:116:in `block in run_specs'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:115:in `run_specs'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
          # ./vendor/bundle/ruby/3.3.0/gems/rspec-core-3.13.0/exe/rspec:4:in `<top (required)>'
          # ./vendor/bundle/ruby/3.3.0/bin/rspec:25:in `load'
          # ./vendor/bundle/ruby/3.3.0/bin/rspec:25:in `<top (required)>'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/lib/bundler/cli/exec.rb:58:in `load'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/lib/bundler/cli/exec.rb:58:in `kernel_load'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/lib/bundler/cli/exec.rb:23:in `run'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/lib/bundler/cli.rb:486:in `exec'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/lib/bundler/cli.rb:31:in `dispatch'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/lib/bundler/cli.rb:25:in `start'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/exe/bundle:48:in `block in <top (required)>'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/lib/bundler/friendly_errors.rb:120:in `with_friendly_errors'
          # /home/circleci/.rubygems/gems/bundler-2.3.25/exe/bundle:36:in `<top (required)>'
          # /home/circleci/.rubygems/bin/bundle:25:in `load'
          # /home/circleci/.rubygems/bin/bundle:25:in `<main>'
          # ------------------
          # --- Caused by: ---
          # Encoding::UndefinedConversionError:
          #   "\xC2" from ASCII-8BIT to UTF-8
          #   /usr/local/lib/ruby/3.3.0/logger/log_device.rb:42:in `write'

Operating System

Ubuntu

Selenium version

Ruby 4.21.1

What are the browser(s) and version(s) where you see this issue?

Firefox 126.0.1

What are the browser driver(s) and version(s) where you see this issue?

latest via Selenium Manager

Are you using Selenium Grid?

n/a

github-actions[bot] commented 3 weeks ago

@mockdeep, thank you for creating this issue. We will troubleshoot it as soon as we can.


Info for maintainers

Triage this issue by using labels.

If information is missing, add a helpful comment and then I-issue-template label.

If the issue is a question, add the I-question label.

If the issue is valid but there is no time to troubleshoot it, consider adding the help wanted label.

If the issue requires changes or fixes from an external project (e.g., ChromeDriver, GeckoDriver, MSEdgeDriver, W3C), add the applicable G-* label, and it will provide the correct link and auto-close the issue.

After troubleshooting the issue, please add the R-awaiting answer label.

Thank you!

titusfortner commented 2 weeks ago

Duplicate of #6937 This patch should fix - 7f67d6e94fdd909b02ead5bcc6ffc06775598b04 Next release will be available soon