/chai-webdriverio

Primary LanguageJavaScriptApache License 2.0Apache-2.0

chai-webdriverio Travis badge Greenkeeper badge

Provides webdriverio sugar for the Chai assertion library. Allows you to create expressive integration tests:

expect('.frequency-field').to.have.text('One time')
expect('.toggle-pane').to.not.be.visible()

What sorts of assertions can we make?

All assertions start with a WebdriverIO-compatible selector, for example:

  • expect('.list') (CSS selector)
  • expect('a[href=http://google.com]') (CSS Selector)
  • expect('//BODY/DIV[6]/DIV[1]') (XPath selector)
  • expect('a*=Save') (Text selector)

Then, we can add our assertion to the chain.

  • expect(selector).to.be.there() - Test whether [at least one] matching element exists in the DOM
  • expect(selector).to.be.visible() - Test whether or not [at least one] matching element is visible
  • expect(selector).to.have.text('string') - Test the text value of the selected element(s) against supplied string. Succeeds if at least one element matches exactly
  • expect(selector).to.have.text(/regex/) - Test the text value of the selected element(s) against the supplied regular expression. Succeeds if at least one element matches
  • expect(selector).to.have.count(number) - Test how many elements exist in the DOM with the supplied selector
  • expect(selector).to.have.value('x') - Test that [at least one] selected element has the given value
  • expect(selector).to.have.focus() - Test that [at least one] selected element has focus

You can also always add a not in there to negate the assertion:

  • expect(selector).not.to.have.text('property')

Setup

Setup is pretty easy. Just:

var chai = require('chai');
var chaiWebdriver = require('chai-webdriverio').default;
chai.use(chaiWebdriver(browser));

// And you're good to go!
browser.url('http://github.com');
chai.expect('#site-container h1.heading').to.not.contain.text("I'm a kitty!");

Default Wait Time

As an optional argument to the initializer, you can add an options object in this format:

var options = {defaultWait: 500} // 500ms
chai.use(chaiWebdriver(browser, options));

The defaultWait parameter will cause chai-webdriverio to wait the specified number of milliseconds for a given selector to appear before failing (if it is not yet present on the page). You can use immediately to skip this default wait time:

expect(selector).to.immediately.have.text('string'); // fails immediately if element is not found

Beware: For immediately to work, your implicit wait time in WebdriverIO must be set to 0. The immediately flag has no way to skip WebdriverIO's implicit wait.

Contributing

so easy.

npm                # download the necessary development dependencies
npm transpile      # compile ES6 into javascript
npm test           # build and run the specs

Contributors:

  • @mltsy : exist, text assertions, documentation & test adjustments

License

Apache 2.0

Thanks

Thanks to goodeggs for creating: chai-webdriver which inspired this module.