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.displayed()
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 DOMexpect(selector).to.be.displayed()
- Test whether or not [at least one] matching element is displayedexpect(selector).to.have.text('string')
- Test the text value of the selected element(s) against supplied string. Succeeds if at least one element matches exactlyexpect(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 matchesexpect(selector).to.have.count(number)
- Test how many elements exist in the DOM with the supplied selectorexpect(selector).to.have.value('x')
- Test that [at least one] selected element has the given valueexpect(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 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!");
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 version | Compatible chai-webdriverio version |
---|---|
5.x.x | >= 1.0.0 |
4.x.x | 0.4.3 |
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
Contributors:
- @mltsy :
exist
,text
assertions, documentation & test adjustments
Apache 2.0
Thanks to goodeggs for creating: chai-webdriver which inspired this module.