Skip to content

Instantly share code, notes, and snippets.

@tlrobinson
Created December 13, 2012 21:15
Show Gist options
  • Save tlrobinson/4279967 to your computer and use it in GitHub Desktop.
Save tlrobinson/4279967 to your computer and use it in GitHub Desktop.
JavaScript REPL for multiple browsers via WebDriver.
webdriver = require 'wd'
repl = require 'repl'
Q = require 'q'
# webdriverConfig =
# host: "ondemand.saucelabs.com"
# port: 80
# username: "USERNAME"
# password: "KEY"
webdriverConfig =
host: "localhost"
port: 4444
browserConfigs = [
# { browserName: 'internet explorer' },
{ browserName: 'firefox' },
{ browserName: 'chrome' },
{ browserName: 'firefox' },
{ browserName: 'chrome' },
{ browserName: 'firefox' },
{ browserName: 'chrome' }
]
lastColor = 0
colorize = (name) ->
n = ((lastColor++ % 5) + 1)
"\x1b[3#{n}m#{name}\x1b[0m"
startREPL = (browsers) ->
r = repl.start
prompt: "browser> "
eval: (cmd, context, filename, callback) ->
promises = for browser in browsers
do (browser) ->
browser.driver.eval(cmd).then (value) ->
console.log "#{browser.coloredName}:", value
, (err) ->
console.log "#{browser.coloredName}:", err
Q.all(promises).then(->).nodeify(callback)
r.on 'exit', ->
Q.all(browser.driver.quit() for browser in browsers).then ->
console.log "Exiting."
, (err) ->
console.warn "Error:", err
.then ->
process.exit()
.done()
promises = for browserConfig in browserConfigs
do ->
name = browserConfig.browserName
browser =
name: name
coloredName: colorize(name)
config: browserConfig
driver: webdriver.promiseRemote webdriverConfig.host, webdriverConfig.port, webdriverConfig.username, webdriverConfig.password
console.log "#{browser.coloredName} starting."
browser.driver.init(browser.config).then ->
console.log "#{browser.coloredName} ready."
browser
Q.all(promises)
.then(startREPL)
.done()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment