Skip to content

Instantly share code, notes, and snippets.

@jonstorer
Last active August 29, 2015 14:11
Show Gist options
  • Save jonstorer/c106c6c9f61ab5a695ad to your computer and use it in GitHub Desktop.
Save jonstorer/c106c6c9f61ab5a695ad to your computer and use it in GitHub Desktop.
This is how we use webdriver in cucumber..
Shared = require './shared'
Data = require './data'
webdriver = require 'selenium-webdriver'
SeleniumServer = require('selenium-webdriver/remote').SeleniumServer
seleniumJar = require('selenium-server-standalone-jar')
server = null
driver = null
timeout = 200
browser = {}
ensure_server_is_running = (next) ->
if server
setImmediate next
else
server = new SeleniumServer(seleniumJar.path, { port: process.env.SELENIUM_PORT })
server.start().then next
ensure_driver_is_running = (next) ->
if driver
setImmediate next
else
ensure_server_is_running ->
driver = new webdriver.Builder().usingServer(server.address()).withCapabilities(webdriver.Capabilities.firefox()).build()
driver.manage().timeouts().implicitlyWait(timeout).then ->
driver.manage().timeouts().pageLoadTimeout(timeout * 10).then ->
driver.manage().timeouts().setScriptTimeout(timeout).then next
findElement = (selector) ->
driver.findElement(webdriver.By.css(selector))
browser.end = (next) ->
if driver?
driver.manage().deleteAllCookies().then ->
driver.get('about:blank').then next
else
setImmediate next
browser.confirm = (next) ->
ensure_driver_is_running ->
driver.switchTo().alert().accept().then next
browser.dismiss = (next) ->
ensure_driver_is_running ->
driver.switchTo().alert().dismiss().then next
browser.find = (selector, next) ->
ensure_driver_is_running ->
driver.findElements(webdriver.By.css(selector)).then next
browser.getContents = (selector, next) ->
ensure_driver_is_running ->
findElement(selector).getOuterHtml().then next
browser.getText = (selector, next) ->
ensure_driver_is_running ->
findElement(selector).getText().then next
browser.getValue = (selector, next) ->
ensure_driver_is_running ->
findElement(selector).getAttribute('value').then next
browser.getValueBySelectorAndAttribute = (selector, attribute, next) ->
ensure_driver_is_running ->
driver.executeAsyncScript("""
var callback = arguments[arguments.length - 1];
var style = document.querySelector("#{selector}").getAttribute("#{attribute}");
callback(style);
""").then next
browser.getPath = (next) ->
ensure_driver_is_running ->
driver.getCurrentUrl().then (url) ->
next url.replace(Shared.site, '')
browser.press = (selector, next) ->
ensure_driver_is_running ->
findElement(selector).click().then next
browser.click = (linkText, next) ->
ensure_driver_is_running ->
driver.findElement(webdriver.By.linkText(linkText)).click().then next
browser.isElementPresent = (selector, next) ->
ensure_driver_is_running ->
driver.isElementPresent(webdriver.By.css(selector)).then next
browser.isElementVisible = (selector, next) ->
ensure_driver_is_running ->
findElement(selector).isDisplayed().then next
browser.isChecked = (selector, next) ->
ensure_driver_is_running ->
findElement(selector).isSelected().then next
browser.clear = (selector, next) ->
ensure_driver_is_running ->
findElement(selector).clear().then next
browser.fill = (selector, value, next) ->
ensure_driver_is_running ->
findElement(selector).sendKeys(value).then next
browser.visit = (url, next) ->
ensure_driver_is_running ->
url = Shared.site + url unless RegExp(/^http/).test(url)
driver.get(url).then ->
Data.last_visited_url = url
next.apply arguments
browser.isClassPresent = (selector, next) ->
ensure_driver_is_running ->
driver.isElementPresent(webdriver.By.className(selector)).then next
browser.waitForLink = (text, next) ->
ensure_driver_is_running ->
driver.wait(webdriver.until.elementLocated(webdriver.By.linkText(text)), timeout).then ->
next()
module.exports = browser
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment