Webdriver and chrome headless

I encountered a surprising behavior when trying to use chrome headless in a docker container

While I had installed chromium-headless in fedora, webdriver's chrome #location method was looking for a chrome or chromium binary and could not find one.

  134) Views an article shows all comments
       Failure/Error: driven_by :selenium, using: :chrome, screen_size: [1400, 2000], options: { url: ENV["SELENIUM_URL"] }
       
       Webdrivers::BrowserNotFound:
         Failed to find Chrome binary.
       # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/chrome_finder.rb:21:in `location'
       # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/chrome_finder.rb:10:in `version'
       # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/chromedriver.rb:51:in `browser_version'
       # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/chromedriver.rb:145:in `browser_build_version'
       # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/chromedriver.rb:32:in `latest_version'
       # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/common.rb:135:in `correct_binary?'
       # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/common.rb:91:in `update'
       # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/chromedriver.rb:160:in `block in <main>'

Just circling back so I capture this - the chromium-headless package includes /usr/lib64/chromium-browser/headless_shell but webdrivers looks in "the usual places" for "the usual names"


      def linux_location
        return wsl_location if System.wsl_v1?

        directories = %w[/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /snap/bin /opt/google/chrome]
        files = %w[google-chrome chrome chromium chromium-browser]

        directories.each do |dir|
          files.each do |file|
            option = "#{dir}/#{file}"
            return option if File.exist?(option)
          end
        end

        nil
      end

Does adding WD_CHROME_PATH="/usr/lib64/chromium-browser/headless_shell magically fix this (and allow me to not install chromium full to run headless tests)?

Files

Path

/usr/lib/.build-id/

/usr/lib/.build-id/87/2be63e1ef0e028cd8072ab28b5d65f06a37db9

/usr/lib64/chromium-browser/headless_shell

So the answer appears to be "no" - or the chrome headless shell doesn't have the same behavior as a full chrome binary does - the first place this falls down is with asking for version:


[0401/050419.736754:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
F[0401/050419.765748:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
F[0401/050419.796463:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
F[0401/050419.826276:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
F

Failures:

  1) Views an article shows all comments
     Failure/Error: driven_by :selenium, using: :chrome, screen_size: [1400, 2000], options: { url: ENV["SELENIUM_URL"] }
     
     RuntimeError:
       Failed to make system call: ["/usr/lib64/chromium-browser/headless_shell", "--product-version"]
     # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/system.rb:190:in `call'
     # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/chrome_finder.rb:119:in `linux_version'
     # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/chrome_finder.rb:10:in `version'
     # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/chromedriver.rb:51:in `browser_version'
     # /opt/apps/bundle/gems/webdrivers-4.6.0/lib/webdrivers/chromedriver.rb:145:in `browser_build_version'

Last updated

Was this helpful?