Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including chai-webdriverio with all npm packages installed. Try it out:

require("chai/package.json"); // chai is a peer dependency. var chaiWebdriverio = require("chai-webdriverio")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

chai-webdriverio v1.0.0

Chai assertions for use with webdriverio

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')

What sorts of assertions can we make?

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

  • expect('.list') (CSS selector)
  • expect('a[href=]') (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) - Test whether [at least one] matching element exists in the DOM
  • expect(selector) - Test whether or not [at least one] matching element is displayed
  • 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)'property')


Setup is pretty easy. Just:

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

// And you're good to go!
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.



WebdriverIO versionCompatible chai-webdriverio version
5.x.x>= 1.0.0


chai-webdriverio version >= 1.0.0 requires Node.js 8.x


so easy.

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


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


Apache 2.0


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


RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free