titusfortner / webdrivers

Keep your Selenium WebDrivers updated automatically
MIT License
592 stars 113 forks source link

Cannot find Chrome binary #253

Closed ryanb closed 1 year ago

ryanb commented 1 year ago

I'm trying out webdrivers version 5.3.0 which appears to be using Chrome for Testing, but I'm seeing this error when running capybara selenium specs in a Rails 7 app under Ruby 2.7.

Selenium::WebDriver::Error::UnknownError:
  unknown error: cannot find Chrome binary
# 0   chromedriver                        0x0000000101d89a58 chromedriver + 4991576
# 1   chromedriver                        0x0000000101d80fa3 chromedriver + 4956067
# 2   chromedriver                        0x0000000101933607 chromedriver + 443911
# 3   chromedriver                        0x00000001019614b7 chromedriver + 631991
# 4   chromedriver                        0x000000010196064c chromedriver + 628300
# 5   chromedriver                        0x00000001019a924c chromedriver + 926284
# 6   chromedriver                        0x00000001019a85af chromedriver + 923055
...

I'm on Intel Mac OS X 13.3 with Chrome 115 installed.

Any suggestions on how to troublshoot this?

Thanks your work on keeping webdrivers gem alive for those of us on Ruby 2.7.

titusfortner commented 1 year ago

Turn on logging, let's see what was requested:

Selenium::WebDriver.logger.level = :debug
dphaener commented 1 year ago

I'm seeing the same issue even on webdrivers v5.2. This started when upgrading chromedriver from v114.x to v115.x. Here is the output of the logging:

2023-08-01 07:02:08 DEBUG Selenium Executing Process ["/opt/homebrew/bin/chromedriver", "--port=9515"]
2023-08-01 07:02:08 DEBUG Selenium polling for socket on ["127.0.0.1", 9515]
Starting ChromeDriver 115.0.5790.102 (90efd4b0ad6aa15eeafcdabd5817ae939f7ba059-refs/branch-heads/5790_90@{#9}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
2023-08-01 07:02:08 INFO Selenium -> POST session
2023-08-01 07:02:08 INFO Selenium    >>> http://127.0.0.1:9515/session | {"capabilities":{"alwaysMatch":{"browserName":"chrome","goog:chromeOptions":{"args":["--headless","--disable-site-isolation-trials"]}}}}
2023-08-01 07:02:08 DEBUG Selenium      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.3.0 (ruby macosx)", "Content-Length"=>"136"}
2023-08-01 07:02:08 INFO Selenium <- {"value":{"error":"unknown error","message":"unknown error: cannot find Chrome binary","stacktrace":"0   chromedriver                        0x00000001030e2924 chromedriver +
4303140\n1   chromedriver                        0x00000001030db050 chromedriver + 4272208\n2   chromedriver                        0x0000000102d0f328 chromedriver + 291624\n3   chromedriver
  0x0000000102d37a7c chromedriver + 457340\n4   chromedriver                        0x0000000102d36ffc chromedriver + 454652\n5   chromedriver                        0x0000000102d76040 chromedriver + 712768\n6
chromedriver                        0x0000000102d7580c chromedriver + 710668\n7   chromedriver                        0x0000000102d408d4 chromedriver + 493780\n8   chromedriver                        0x0000000102
d4171c chromedriver + 497436\n9   chromedriver                        0x00000001030a37dc chromedriver + 4044764\n10  chromedriver                        0x00000001030a7d20 chromedriver + 4062496\n11  chromedriver
                        0x00000001030adf40 chromedriver + 4087616\n12  chromedriver                        0x00000001030a8824 chromedriver + 4065316\n13  chromedriver                        0x0000000103080d1c chr
omedriver + 3902748\n14  chromedriver                        0x00000001030c4414 chromedriver + 4178964\n15  chromedriver                        0x00000001030c456c chromedriver + 4179308\n16  chromedriver
               0x00000001030d4830 chromedriver + 4245552\n17  libsystem_pthread.dylib             0x000000019a81bfa8 _pthread_start + 148\n18  libsystem_pthread.dylib             0x000000019a816da0 thread_start +
 8\n"}}
2023-08-01 07:02:09 DEBUG Selenium Executing Process ["/opt/homebrew/bin/chromedriver", "--port=9713"]
2023-08-01 07:02:09 DEBUG Selenium polling for socket on ["127.0.0.1", 9713]
Starting ChromeDriver 115.0.5790.102 (90efd4b0ad6aa15eeafcdabd5817ae939f7ba059-refs/branch-heads/5790_90@{#9}) on port 9713
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
2023-08-01 07:02:09 INFO Selenium -> POST session
2023-08-01 07:02:09 INFO Selenium    >>> http://127.0.0.1:9713/session | {"capabilities":{"alwaysMatch":{"browserName":"chrome","goog:chromeOptions":{"args":["--headless","--disable-site-isolation-trials"]}}}}
2023-08-01 07:02:09 DEBUG Selenium      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.3.0 (ruby macosx)", "Content-Length"=>"136"}
2023-08-01 07:02:09 INFO Selenium <- {"value":{"error":"unknown error","message":"unknown error: cannot find Chrome binary","stacktrace":"0   chromedriver                        0x00000001030e2924 chromedriver +
4303140\n1   chromedriver                        0x00000001030db050 chromedriver + 4272208\n2   chromedriver                        0x0000000102d0f328 chromedriver + 291624\n3   chromedriver
  0x0000000102d37a7c chromedriver + 457340\n4   chromedriver                        0x0000000102d36ffc chromedriver + 454652\n5   chromedriver                        0x0000000102d76040 chromedriver + 712768\n6
chromedriver                        0x0000000102d7580c chromedriver + 710668\n7   chromedriver                        0x0000000102d408d4 chromedriver + 493780\n8   chromedriver                        0x0000000102
d4171c chromedriver + 497436\n9   chromedriver                        0x00000001030a37dc chromedriver + 4044764\n10  chromedriver                        0x00000001030a7d20 chromedriver + 4062496\n11  chromedriver
                        0x00000001030adf40 chromedriver + 4087616\n12  chromedriver                        0x00000001030a8824 chromedriver + 4065316\n13  chromedriver                        0x0000000103080d1c chr
omedriver + 3902748\n14  chromedriver                        0x00000001030c4414 chromedriver + 4178964\n15  chromedriver                        0x00000001030c456c chromedriver + 4179308\n16  chromedriver
               0x00000001030d4830 chromedriver + 4245552\n17  libsystem_pthread.dylib             0x000000019a81bfa8 _pthread_start + 148\n18  libsystem_pthread.dylib             0x000000019a816da0 thread_start +
 8\n"}}
titusfortner commented 1 year ago

So many different overlapping bugs during this mess...

chromedriver 115 currently has a bug on Mac where it is looking for a binary "Google Chrome for Testing" instead of just "Google Chrome." Since most people didn't install Chrome that way it is erroring. Google made a fix, it hasn't been released, yet.

Selenium 4.11:

  1. identifies the browser on the system
  2. gets the right driver for that browser
  3. stores the information of browser location and tells the driver to use that location when starting a new session

Webdrivers can't do the third thing, so you have to use Chrome::Options#binary= to set the path to the browser yourself.

This is one of the reasons why the Selenium solution is better if you can upgrade to it.

ryanb commented 1 year ago

Just to followup on this: Chrome 116 is out now and webdrivers 5.3.0 works like a charm. I'm no longer seeing the above error. Thanks again Titus for keeping the gem going.