theintern / digdug

A JavaScript library for launching WebDriver service tunnels.
https://theintern.github.io/digdug/
Other
44 stars 28 forks source link

SeleniumTunnel: Can't download ChromeDriver 2.23+ on Mac #33

Closed bdpartridge closed 7 years ago

bdpartridge commented 7 years ago

Description SeleniumTunnel fails to download ChromeDriver for versions 2.23+ on Mac OS X. The root cause seems to be that for ChromeDriver versions 2.23+, the downloadable is named "chromedriver_mac64.zip" instead of "chromedriver_mac32.zip", which was the case for all previous versions.

Steps to Reproduce digdug: 1.5.0 Node: 4.1.1 OS: Mac OS X El Capitan (10.11.6)

{ environments: [{browserName: "chrome"}], tunnel: "SeleniumTunnel", tunnelOptions: { version: "2.53.1", drivers: [ { name: "chrome", version: "2.24", }, ], }, ... }

Expected Result SeleniumTunnel downloads ChromeDriver executable for version 2.23+ and starts the tunnel as normal.

Actual Result The executable is not downloaded and the tunnel fails to start. Here's a sample stack trace:

Listening on 0.0.0.0:9000 Tunnel started Suite chrome on any platform FAILED UnknownError: [POST http://localhost:4444/wd/hub/session / {"desiredCapabilities":{"name":"test/functional/intern-config","idle-timeout":60,"browserName":"chrome"}}] The driver executable does not exist: /Users/bpartridge/forward/fwd/web/src/main/resources/web/node_modules/intern/node_modules/digdug/selenium-standalone/chromedriver at Server.createSession <node_modules/intern/node_modules/leadfoot/Server.js:330:15> at <node_modules/intern/lib/executors/Runner.js:200:23> at retry <node_modules/intern/lib/util.js:804:13> at <node_modules/intern/node_modules/dojo/Promise.ts:393:15> at runCallbacks <node_modules/intern/node_modules/dojo/Promise.ts:11:11> at <node_modules/intern/node_modules/dojo/Promise.ts:317:4> at run <node_modules/intern/node_modules/dojo/Promise.ts:237:7> at <node_modules/intern/node_modules/dojo/nextTick.ts:44:3> at doNTCallback0 <node.js:407:9> at process._tickCallback <node.js:336:13>

I'd be happy to submit a PR for this if that would help.

jason0x43 commented 7 years ago

Hmmm...we could have a version-to-name mapping, or possibly try different canonical names. Until we have something better, you can use the url option to handle irregular name changes:

{
    name: 'chrome',
    url: 'http://chromedriver.storage.googleapis.com/2.25/chromedriver_mac64.zip'
}
jason0x43 commented 7 years ago

You can also use the artifact option:

{
    name: 'chrome',
    version: '2.25',
    artifact: 'chromedriver_mac64.zip'
}
bdpartridge commented 7 years ago

Awesome! Thanks for fixing this.