menfon
menfon

Reputation: 1827

Chrome not starting using Watir

The script works locally, but not on a server.

b = Watir::Browser.new :chrome, headless: true

Error:

response.rb:69:in `assert_ok': unknown error: Chrome failed to start: exited abnormally (Selenium::WebDriver::Error::UnknownError)
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=2.45.615279 (12b89733300bd268cff3b78fc76cb8f3a7cc44e5),platform=Linux 4.9.75-29.el7.x86_64 x86_64)
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/response.rb:32:in `initialize'
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/http/common.rb:84:in `new'
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/http/common.rb:84:in `create_response'
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/http/default.rb:104:in `request'
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/http/common.rb:62:in `call'
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/bridge.rb:166:in `execute'
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/bridge.rb:99:in `create_session'
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/bridge.rb:53:in `handshake'
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/chrome/driver.rb:49:in `initialize'
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/common/driver.rb:44:in `new'
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/common/driver.rb:44:in `for'
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver.rb:86:in `for'
        from /root/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/watir-6.16.5/lib/watir/browser.rb:46:in `initialize'
        from rebooter.rb:9:in `new'
        from rebooter.rb:9:in `<main>'

I found few answers mentioning --disable-dev-shm-usage, but I don't really know how to pass it.

I tried without success:

Watir::Browser.new :chrome, headless: true, disableDevShmUsage: true

I am not really sure what shm is, but df is showing I have 0% usage of it:

# df -h | grep -Ei 'shm|use%'
Filesystem                      Size  Used Avail Use% Mounted on
tmpfs                           962M     0  962M   0% /dev/shm

How to modify the script to run also on a server? Why is it working locally, but not on a server?

Upvotes: 1

Views: 1409

Answers (1)

Tyl
Tyl

Reputation: 5262

Combined with your own discovery, you can pass args like this:

args = %w[headless disable-gpu disable-dev-shm-usage disable-software-rasterizer no-sandbox]
b = Watir::Browser.new :chrome, args: args

shm is short for shared memory.
About the sandbox.

If you are using remote chromdriver, then above simple way of passing args won't work, then:

b = Watir::Browser.new :chrome, {url: "http://127.0.0.1:9515", chromeOptions: {args: args}}

http://127.0.0.1:9515 is an example of remote chromedriver server.

Note no-sandbox is not recommended if you have other solution.
So it's better to fix it or change to use other browser instead.
Like firefox also has headless mode now, combined with geckodriver is a good option too.

Upvotes: 5

Related Questions