pita-wd

WebDriver/Selenium 2 node.js client

npm install pita-wd
2 downloads in the last month

WD.js -- A light weight WebDriver/Se2 client for node.js

Update node to latest

http://nodejs.org/#download

Install

npm install wd

Authors

License

Usage

): wd shell
> x = wd.remote() or wd.remote("ondemand.saucelabs.com", 80, "username", "apikey")

> x.init() or x.init({desired capabilities ovveride})
> x.get("http://www.url.com")
> x.eval("window.location.href", function(e, o) { console.log(o) })
> x.quit()

Writing a test!

var webdriver = require('wd')
  , assert = require('assert');

var browser = webdriver.remote();

browser.on('status', function(info){
  console.log('\x1b[36m%s\x1b[0m', info);
});
browser.on('command', function(meth, path){
  console.log(' > \x1b[33m%s\x1b[0m: %s', meth, path);
});

desired = {
  browserName:'chrome'
  , tags: ["examples"]
  , name: "This is an example test"
}

browser.init(desired, function() {
  browser.get("http://saucelabs.com/test/guinea-pig", function() {
    browser.title(function(err, title) {
      assert.ok(~title.indexOf('I am a page title - Sauce Labs'), 'Wrong title!');
      browser.elementById('submit', function(err, el) {
        browser.clickElement(el, function() {
          browser.eval("window.location.href", function(err, title) {
            assert.ok(~title.indexOf('#'), 'Wrong title!');
            browser.quit()
          })
        })
      })
    })
  })
})

Supported Methods








































JsonWireProtocol wd
GET /status
Query the server's current status.
status(cb) -> cb(err, status)
POST /session
Create a new session.
init(desired, cb) -> cb(err, sessionID)
GET /sessions
Returns a list of the currently active sessions.
  • all sessions: sessions(cb) -> cb(err, sessions)
  • current session:
    altSessionCapabilities(cb) -> cb(err, capabilities)
GET /session/:sessionId
Retrieve the capabilities of the specified session.
sessionCapabilities(cb) -> cb(err, capabilities)
DELETE /session/:sessionId
Delete the session.
quit(cb) -> cb(err)
POST /session/:sessionId/timeouts
Configure the amount of time that a particular type of operation can execute for before they are aborted and a |Timeout| error is returned to the client.
  • configurable type: NA (but setImplicitWaitTimeout and setAsyncScriptTimeout do the same)
  • page load timeout:
    setPageLoadTimeout(ms, cb) -> cb(err)

POST /session/:sessionId/timeouts/asyncscript
Set the amount of time, in milliseconds, that asynchronous scripts executed by /session/:sessionId/execute_async are permitted to run before they are aborted and a |Timeout| error is returned to the client.
setAsyncScriptTimeout(ms, cb) -> cb(err)
POST <a href="http://code.google.com/p/selenium/wiki/JsonWireProtocol#POST/session/:sessionId/timeouts/implicitwait">/session/:sessionId/timeouts/implicit_wait
Set the amount of time the driver should wait when searching for elements.
setImplicitWaitTimeout(ms, cb) -> cb(err)
GET <a href="http://code.google.com/p/selenium/wiki/JsonWireProtocol#GET/session/:sessionId/url">/session/:sessionId/url
Retrieve the URL of the current page.
url(cb) -> cb(err, url)
POST /session/:sessionId/url
Navigate to a new URL.
get(url,cb) -> cb(err)
POST /session/:sessionId/forward
Navigate forwards in the browser history, if possible.
forward(cb) -> cb(err)
POST /session/:sessionId/back
Navigate backwards in the browser history, if possible.
back(cb) -> cb(err)
POST /session/:sessionId/refresh
Refresh the current page.
refresh(cb) -> cb(err)
POST /session/:sessionId/execute
Inject a snippet of JavaScript into the page for execution in the context of the currently selected frame.
  • execute script:
    execute(code, args, cb) -> cb(err, value returned)
    • args is an optional Array
  • execute script using eval(code):
    safeExecute(code, args, cb) -> cb(err, value returned)
    • args is an optional Array
  • evaluate expression (using execute):
    eval(code, cb) -> cb(err, value)
  • evaluate expression (using safeExecute):
    safeEval(code, cb) -> cb(err, value)
POST /session/:sessionId/executeasync
Inject a snippet of JavaScript into the page for execution in the context of the currently selected frame.
  • execute async script:
    executeAsync(code, args, cb) -> cb(err, value returned)
    • args is an optional Array
  • execute async script using eval(code):
    safeExecuteAsync(code, args, cb) -> cb(err, value returned)
    • args is an optional Array

DELETE <a href="http://code.google.com/p/selenium/wiki/JsonWireProtocol#DELETE/session/:sessionId/window">/session/:sessionId/window
Close the current window.
close(cb) -> cb(err)
GET /session/:sessionId/cookie
Retrieve all cookies visible to the current page.
allCookies() -> cb(err, cookies)
POST /session/:sessionId/cookie
Set a cookie.
setCookie(cookie, cb) -> cb(err)
DELETE /session/:sessionId/cookie
Delete all cookies visible to the current page.
deleteAllCookies(cb) -> cb(err)
DELETE /session/:sessionId/cookie/:name
Delete the cookie with the given name.
deleteCookie(name, cb) -> cb(err)
GET /session/:sessionId/title
Get the current page title.
title(cb) -> cb(err, title)
POST /session/:sessionId/element
Search for an element on the page, starting from the document root.
  • element(using, value, cb) -> cb(err, element)
  • elementsuffix(value, cb) -> cb(err, element)
    suffix:
    ByClassName, ByCssSelector, ById,
    ByName, ByLinkText, ByPartialLinkText, ByTagName, ByXPath, ByCss
  • see also hasElement, hasElementsuffix, elementOrNull, elementsuffixOrNull, elementIfExists, elementsuffixIfExists, in the elements section.

POST /session/:sessionId/elements
Search for multiple elements on the page, starting from the document root.
  • elements(using, value, cb) -> cb(err, elements)
  • elementssuffix(value, cb) -> cb(err, elements)
    suffix:
    ByClassName, ByCssSelector, ById,
    ByName, ByLinkText, ByPartialLinkText, ByTagName, ByXPath, ByCss
  • hasElement(using, value, cb) -> cb(err, boolean)
  • hasElementsuffix(value, cb) -> cb(err, boolean)
    suffix:
    ByClassName, ByCssSelector, ById,
    ByName, ByLinkText, ByPartialLinkText, ByTagName, ByXPath, ByCss

  • elementOrNull(using, value, cb) -> cb(err, element)
    (avoids not found error throw and returns null instead)
  • elementsuffixOrNull(value, cb) -> cb(err, element)
    (avoids not found error throw and returns null instead)
    suffix:
    ByClassName, ByCssSelector, ById,
    ByName, ByLinkText, ByPartialLinkText, ByTagName, ByXPath, ByCss
  • elementIfExists(using, value, cb) -> cb(err, element)
    (avoids not found error throw and returns undefined instead)
  • elementsuffixIfExists(value, cb) -> cb(err, element)
    (avoids not found error throw and returns undefined instead)
    suffix:
    ByClassName, ByCssSelector, ById,
    ByName, ByLinkText, ByPartialLinkText, ByTagName, ByXPath, ByCss


POST /session/:sessionId/element/active
Get the element on the page that currently has focus.
active(cb) -> cb(err, element)
POST /session/:sessionId/element/:id/click
Click on an element.
clickElement(element, cb) -> cb(err)
GET /session/:sessionId/element/:id/text
Returns the visible text for the element.
  • text(element, cb) -> (err, text)
  • textPresent(searchText, element, cb) -> (err, boolean)

POST /session/:sessionId/element/:id/value
Send a sequence of key strokes to an element.
  • type(element, keys, cb) -> cb(err)
  • special key map: wd.SPECIALKEYS (see lib/special-keys.js)
POST <a href="http://code.google.com/p/selenium/wiki/JsonWireProtocol#POST/session/:sessionId/keys">/session/:sessionId/keys
Send a sequence of key strokes to the active element.
  • keys(keys, cb) -> cb(err)
  • special key map: wd.SPECIALKEYS (see lib/special-keys.js)
POST <a href="http://code.google.com/p/selenium/wiki/JsonWireProtocol#POST/session/:sessionId/element/:id/clear">/session/:sessionId/element/:id/clear
Clear a TEXTAREA or text INPUT element's value.
clear(element, cb) -> cb(err)
GET /session/:sessionId/element/:id/attribute/:name
Get the value of an element's attribute.
  • getAttribute(element, attrName, cb) -> cb(err, value)
  • getValue(element, cb) -> cb(err, value)
POST /session/:sessionId/acceptalert
Accepts the currently displayed alert dialog.
acceptAlert(cb) -> cb(err)
POST <a href="http://code.google.com/p/selenium/wiki/JsonWireProtocol#POST/session/:sessionId/dismissalert">/session/:sessionId/dismiss_alert
Dismisses the currently displayed alert dialog.
dismissAlert(cb) -> cb(err)
POST <a href="http://code.google.com/p/selenium/wiki/JsonWireProtocol#POST/session/:sessionId/moveto">/session/:sessionId/moveto
Move the mouse by an offset of the specificed element.
moveTo(element, xoffset, yoffset, cb) -> cb(err)
POST /session/:sessionId/click
Click any mouse button (at the coordinates set by the last moveto command).
click(button, cb) -> cb(err)
buttons: {left: 0, middle: 1 , right: 2}
POST /session/:sessionId/buttondown
Click and hold the left mouse button (at the coordinates set by the last moveto command).
buttonDown(cb) -> cb(err)
POST /session/:sessionId/buttonup
Releases the mouse button previously held (where the mouse is currently at).
buttonUp(cb) -> cb(err)
POST /session/:sessionId/doubleclick
Double-clicks at the current mouse coordinates (set by moveto).
doubleclick(cb) -> cb(err)
EXTRA: waitForCondition
Waits for JavaScript condition to be true (polling within wd client).
waitForCondition(conditionExpr, timeout, pollFreq, cb) -> cb(err, boolean)
  • conditionExpr should return a boolean
  • timeout and pollFreq are optional (default: 1000, 100).
  • return true if condition satisfied, error otherwise.
EXTRA: waitForConditionInBrowser
Waits for JavaScript condition to be true. (async script polling within browser)
waitForConditionInBrowser(conditionExpr, timeout, pollFreq, cb) -> cb(err, boolean)
  • setAsyncScriptTimeout must be set to value higher than timeout
  • conditionExpr should return a boolean
  • timeout and pollFreq are optional (default: 1000, 100).
  • return true if condition satisfied, error otherwise.

Full JsonWireProtocol mapping:

full mapping

More docs!

WD is simply implementing the Selenium JsonWireProtocol, for more details see the official docs:
 - http://code.google.com/p/selenium/wiki/JsonWireProtocol

Run the tests!

  - Run the selenium server with chromedriver: 
      java -jar selenium-server-standalone-2.21.0.jar -Dwebdriver.chrome.driver=<PATH>/chromedriver
  - cd wd
  - npm install .
  - make test
  - look at the results!
npm loves you