titusfortner / webdrivers

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

Solution for VCS and WebMock no longer working #254

Closed kristofenyi closed 1 year ago

kristofenyi commented 1 year ago

Summary

webdrivers 5.2 is unable to locate latest chromedriver Net::HTTPServerException: 404 "Not Found" with https://chromedriver.storage.googleapis.com/115.0.5790.110/chromedriver_linux64.zip webdrivers 5.3.1 makes http request to GET https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json & fails

Debug Info

Please provide the following information for bug reports:

It is probably my setting with not allowing calls to external urls from cassets. But i am getting


rails Webdrivers::NetworkError:  Net::HTTPServerException: 404 "Not Found"
Failure/Error: driven_by :selenium, using: :headless_chrome, screen_size: [1400, 2000]

          VCR::Errors::UnhandledHTTPRequestError:

            ================================================================================
            An HTTP request has been made that VCR does not know how to handle:
              GET https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json

            There is currently no cassette in use. There are a few ways
            you can configure VCR to handle this request:

              * If you're surprised VCR is raising this error
                and want insight about how VCR attempted to handle the request,
                you can use the debug_logger configuration option to log more details [1].
              * If you want VCR to record this request and play it back during future test
                runs, you should wrap your test (or this portion of your test) in a
                `VCR.use_cassette` block [2].
              * If you only want VCR to handle requests made while a cassette is in use,
                configure `allow_http_connections_when_no_cassette = true`. VCR will
                ignore this request since it is made when there is no cassette [3].
              * If you want VCR to ignore this request (and others like it), you can
                set an `ignore_request` callback [4].

            [1] https://www.relishapp.com/vcr/vcr/v/6-1-0/docs/configuration/debug-logging
            [2] https://www.relishapp.com/vcr/vcr/v/6-1-0/docs/getting-started
            [3] https://www.relishapp.com/vcr/vcr/v/6-1-0/docs/configuration/allow-http-connections-when-no-cassette
            [4] https://www.relishapp.com/vcr/vcr/v/6-1-0/docs/configuration/ignore-request```

#### Expected Behavior
Use headless chrome to run rpsec tests

#### Actual Behavior
Not able to locate driver or make GET call to ```https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json```
timdiggins commented 1 year ago

@kristofenyi can you share how you solved this? Having the same problem (and when we ignore the relevant hosts, we're getting a crash in chromedrivers / selenium says chrome binary not found. Manually updating chromedriver via RAILS_ENV=test rails webdrivers:chromedriver:update doesn't seem to help

titusfortner commented 1 year ago

I updated the wiki for this: https://github.com/titusfortner/webdrivers/wiki/Using-with-VCR-or-WebMock

The recommendation is to use Selenium 4.11 and do something like this so the Selenium Manager binary is not executed:

          allow(Selenium::WebDriver::DriverFinder).to receive(:path).and_return('/path/to/driver')
titusfortner commented 1 year ago

If you're trying to skip everything driver related, can return nil and also mock the file assertions:

          allow(Selenium::WebDriver:: Platform).to receive(:assert_file)
          allow(Selenium::WebDriver:: Platform).to receive(:assert_executable)

Let me know what the actual use case is and if I can help further.

titusfortner commented 1 year ago

I guess I'll leave this closed because my current plan for webdrivers 6 is to wrap Selenium Manager directly. But if someone has a PR that makes this work, I'll look at it.

timdiggins commented 1 year ago

Thanks for response! Our plan is to upgrade to Ruby 3.0 so we can get the selenium-webdrivers up to 4.11 (from 4.9), but in the meantime we had to add "edgedl.me.gvt1.com" as well as "googlechromelabs.github.io" to the vcr ignore_hosts and then everything works - but it does seem slower than before -- haven't looked into it yet.