Wd extension to do AngularJS e2e/midway testing.
JavaScript CSS
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
lib
test
testapp
.gitignore
.jshintrc
LICENSE.txt
README.md
index.js
package.json

README.md

#wd-tractor

A port of Protractor to the wd driver.

Credits

  • Thanks to the Protractor project. A lot of ideas and code have been lifted from there.

Install

npm install wd-tractor

You also need to have Selenium running, or use Saucelabs.

Choose your style

Promises

...

browser
  .init({browserName: 'chrome'})
  .get('http://www.angularjs.org')
  .elementByNgInput('yourName').type('Bozzo')
  .elementByNgBinding('{{yourName}}')
    .text().should.become('Hello Bozzo!')
  .get('http://www.angularjs.org')
  .elementByNgRepeaterRow('todo in todos', 2)
    .text().should.become('build an angular app')
  .quit()
  .done();

Regular async code

...

async.waterfall([
  function(done) { browser.init({browserName: 'chrome'}, done); },
  function(session, done) { browser.get('http://www.angularjs.org', done );},
  // Displaying your name
  function(done) { browser.elementByNgInput('yourName', done);},
  function(input ,done) { input.type('Bozzo', done); },
  function(done) { browser.elementByNgBinding('{{yourName}}', done );},
  function(name, done) { name.text(done); },
  function(name, done) { name.should.equal('Hello Bozzo!'); done(); },
  // Getting todo list
  function(done) { browser.get('http://www.angularjs.org', done );},
  function(done) {
    browser.elementByNgRepeaterRow('todo in todos', 2, done);
  }, function(todo, done) { todo.text(done); },
  function(todo, done) { todo.should.equal('build an angular app'); done(); },
], function(err) {
  if(err) {throw err;}
  browser.quit();
});

Api

wd

wd-tractor extends the wd api. wd doc is here.

Extra methods

/**
 * Wait until Angular has finished rendering and has
 * no outstanding $http calls before continuing.
 */
waitForAngular(cb) -> cb(err)

/**
 * Add a mock module
 */
addMockModule(name, new wd.Module(script))

/**
 * Clear all mock modules
 */
clearMockModules()

/**
 * Original wd get.
 */
wdGet(url, cb) -> cb(err)

/**
 * Angular Javascript get. Use the `NG_DEFER_BOOTSTRAP!` functionality
 * to enable Angular module mocking. Default get.
 */
ngGet(url, cb) -> cb(err)

/**
 * Sets the angular root element.
 */
setRootEl(rootEl)

/**
 * Evaluate angular expression in element scope.
 */
ngEval(el, expr, cb) -> cb(err, res)
element.ngEval(expr, cb) -> cb(err, res)

/**
 * Methods to lookup element(s) using angular bindings.
 */
elementByNgBinding(binding, cb) -> cb(err, el)
elementByNgBindingIfExists(binding, cb) -> cb(err, el)
elementByNgBindingOrNull(binding, cb) -> cb(err, el)
elementsByNgBinding(binding, cb) -> cb(err, els)
hasElementByNgBinding(binding, cb) -> cb(err, status)
waitForElementByNgBinding(binding, cb) -> cb(err)
waitForVisibleByNgBinding(binding, cb) -> cb(err)


/**
 * Methods to lookup input bound with ng-model.
 */
elementByNgInput(model.cb) -> cb(err, el)
elementByNgInputIfExists(model.cb) -> cb(err, el)
elementByNgInputOrNull(model.cb) -> cb(err, el)
hasElementByNgInput(model.cb) -> cb(err, status)
waitForElementByNgInput(model.cb) -> cb(err)
waitForVisibleByNgInput(model.cb) -> cb(err)

/**
 * Methods to lookup select bound with ng-model.
 */
elementByNgSelect(model.cb) -> cb(err, el)
elementByNgSelectIfExists(model.cb) -> cb(err, el)
elementByNgSelectOrNull(model.cb) -> cb(err, el)
hasElementByNgSelect(model.cb) -> cb(err, status)
waitForElementByNgSelect(model.cb) -> cb(err)
waitForVisibleByNgSelect(model.cb) -> cb(err)

/**
 * Methods to lookup selected options bound with ng-model.
 */
elementByNgSelectedOption(model.cb) -> cb(err, el)
elementByNgSelectedOptionIfExists(model.cb) -> cb(err, el)
elementByNgSelectedOptionOrNull(model.cb) -> cb(err, el)
hasElementByNgSelectedOption(model.cb) -> cb(err, status)
waitForElementByNgSelectedOption(model.cb) -> cb(err)
waitForVisibleByNgSelectedOption(model.cb) -> cb(err)

/**
 * Methods to lookup specific elements within ng repeaters, identified by a row
 * and a column.
 */
elementByNgRepeater(repeatDescriptor, index, binding, cb) -> cb(err, el)
elementByNgRepeaterIfExists(repeatDescriptor, index, binding, cb) -> cb(err, el)
elementByNgRepeaterOrNull(repeatDescriptor, index, binding, cb) -> cb(err, el)
hasElementByNgRepeater(repeatDescriptor, index, binding, cb) -> cb(err, status)
waitForElementByNgRepeater(repeatDescriptor, index, binding, cb) -> cb(err)
waitForVisibleByNgRepeater(repeatDescriptor, index, binding, cb) -> cb(err)

/**
 * Methods to lookup a row elements within ng repeaters. This returns the div
 * containing the whole row.
 */
elementByNgRepeaterRow(repeatDescriptor, index, cb) -> cb(err, el)
elementByNgRepeaterRowIfExists(repeatDescriptor, index, cb) -> cb(err, el)
elementByNgRepeaterRowOrNull(repeatDescriptor, index, cb) -> cb(err, el)
hasElementByNgRepeaterRow(repeatDescriptor, index, cb) -> cb(err, status)
waitForElementByNgRepeaterRow(repeatDescriptor, index, cb) -> cb(err)
waitForVisibleByNgRepeaterRow(repeatDescriptor, index, cb) -> cb(err)

/**
 * Method to lookup a column within ng repeaters. This returns a list containing
 * the column elements.
 */
elementsByNgRepeaterColumn(repeatDescriptor, binding, cb) -> cb(err, els)

Tests

  • Start Selenium with Chromedriver
  • Start the test app cd testapp && node ./scripts/web-server.js
  • mocha test

Todo

  • Add debugging functionality.