UNPKG

chai-webdriver

Version:

Build more expressive integration tests with some webdriver sugar for chai.js

86 lines (58 loc) 3.71 kB
# chai-webdriver [![Build Status](https://travis-ci.org/goodeggs/chai-webdriver.png)](https://travis-ci.org/goodeggs/chai-webdriver) [![Dependency Status](https://david-dm.org/goodeggs/chai-webdriver.png)](https://david-dm.org/goodeggs/chai-webdriver) [![NPM version](https://badge.fury.io/js/chai-webdriver.png)](http://badge.fury.io/js/chai-webdriver) Provides [selenium-webdriver](https://npmjs.org/package/selenium-webdriver) sugar for the [Chai](http://chaijs.com/) assertion library. Allows you to create expressive integration tests: ```javascript expect('.frequency-field').dom.to.contain.text('One time') expect('.toggle-pane').dom.to.not.be.visible() ``` ## What sorts of assertions can we make? All assertions start with a [Sizzle-compatible css selector](http://sizzlejs.com/), for example: - `expect('.list')` - `expect('div > h1')` - `expect('a[href=http://google.com]')` Then we add the dom flag, like so: - `expect(selector).dom` Finally, we can add our assertion to the chain. - `expect(selector).dom.to.have.text('string')` - Test the text value of the dom against supplied string. Exact matches only. - `expect(selector).dom.to.contain.text('string')` - Test the text value of the dom against supplied string. Partial matches allowed. - `expect(selector).dom.to.match(/regex/)` - Test the text value of the dom against the regular expression. - `expect(selector).dom.to.have.text(/regex/)` - Test the text value of the dom against the regular expression. (Same as `match` above). - `expect(selector).dom.to.be.visible()` - Check whether or not the element is being rendered - `expect(selector).dom.to.be.disabled()` - Check whether or not the form element is disabled - `expect(selector).dom.to.have.count(number)` - Test how many elements exist in the dom with the supplied selector - `expect(selector).dom.to.have.style('property', 'value')` - Test the CSS style of the element. Exact matches only, unfortunately, for now. - `expect(selector).dom.to.have.value('string')` - Test the value of a form field against supplied string. - `expect(selector).dom.to.have.htmlClass('warning')` - Tests that the element has `warning` as one of its class attributes. - `expect(selector).dom.to.have.attribute('attribute', 'value')` - Test an element's `attribute` against `value` as an exact match. By omitting `value` test simply checks for existance of attribute. - `expect(selector).dom.to.have.attribute('attribute', /regex/)` - Test an element's `attribute` against a regular expresssion. You can also always add a `not` in there to negate the assertion: - `expect(selector).dom.not.to.have.style('property', 'value')` ### Asynchronous flow Note that all these assertions are presumed to be *asynchronous* (using selenium-webdriver's promise chain). They can all take callbacks, or be chained with promises. For example: - `expect(selector).dom.to.have.text('string', function(){...})` - `expect(selector).dom.to.have.text('string').then(function(){...})` ## Setup Setup is pretty easy. Just: ```javascript // Start with a webdriver instance: var sw = require('selenium-webdriver'); var driver = new sw.Builder() .withCapabilities(sw.Capabilities.chrome()) .build() // And then... var chai = require('chai'); var chaiWebdriver = require('chai-webdriver'); chai.use(chaiWebdriver(driver)); // And you're good to go! driver.get('http://github.com'); chai.expect('#site-container h1.heading').dom.to.not.contain.text("I'm a kitty!"); ``` ## Contributing so easy. ```bash npm install # download the necessary development dependencies npm run-script build # compile coffee-script into javascript npm test # build and run the specs ``` ## License MIT.