Webdriver.io for Derby.js
npm install derby-webdriverio> Webdriver.io for Derby.js
```
npm i --save derby-webdriverio
In your derby app index file:
`coffeeapp/index.coffee
app = require('derby').createApp 'foobar', __filename
window.app = app if window? # app must be accessible from the client
app.use require('derby-webdriverio/renderReady')
`
Create wdio.conf.js in project's root folder:
`js`
// wdio.conf.js
exports.config = require('derby-webdriverio')({
// Specify multiple browsers to run.
// If it's 1 then will be created a single 'remote' instance.
// If it's >=2 then 'multiremote' will be created; the whole group will be
// called with the specified name; and each browser in this group will
// have a singular form of that name + number, i.e. 'student0', 'student1', ...
// http://webdriver.io/guide/usage/multiremote.html
browsers: {
browser: 1,
prof: 1,
students: 10
},
// selenium settings to use for each browser specified above
desiredCapabilities: {
browserName: 'chrome'
},
// base url which will be used for .url() methods
baseUrl: 'http://localhost:3003',
// timeout to wait until test fails
waitforTimeout: 30000,
// path to save screenshots (by default it's /test/screenshots/, don't forget
// to add it to your .gitignore)
screenshotPath: __dirname + '/test/screenshots/',
// files with tests
specs: [
'./test/e2e/*/.js',
'./test/e2e/*/.coffee'
],
// files to ignore
exclude: [
'./test/e2e/*/_.js',
'./test/e2e/*/_.coffee'
]
})
To run your tests:
``
./node_modules/.bin/wdio
If you want to run it as npm test you can add the following script to your package.json:
``
"scripts": {
"test": "wdio",
},
---
These methods accept the same arguments as the original methods.
They do the same action and wait for derby page to fully load after that.
##### .urlAndWait().clickAndWait()
##### .submitFormAndWait()
#####
---
All racer get- and set- methods are available.
Couple of examples:
##### .modelGet()
`coffee`
browser
.modelGet '_session.userId'
.then (userId) ->
@urlAndWait '/profile/' + userId
##### .modelSet()
`coffee`
it 'check title', ->
newTitle = 'New Title'
prevTitle = yield browser.modelSet '_page.title', newTitle
browser.getTitle()
.then (title) ->
title.should.not.equal prevTitle
title.should.equal newTitle
##### all other get/set methods are supported -- .modelAdd, .modelPop, etc.
---
##### .historyPush(path)
Do app.history.push on the client and wait for the page to fully load.
`coffee`
browser
.historyPush '/profile'
.getTitle()
.should.eventually.equal 'My Profile'
##### .historyRefresh()
Refresh the page using app.history.refresh on the client.
---
A bunch of useful shorthand methods to test things.
All of them accept the arguments which will be passed to X() function.
##### shouldExist()
`coffeeX()
browserNote that the arguments passed here are
function arguments`
.shouldExist 'form.main button *= Submit'
.shouldExist '*= Welcome to my Website'
##### shouldNotExist()shouldBeVisible()
##### shouldNotBeVisible()
#####
##### shouldExecute
Accepts the same arguments as .execute() and checks that its return valuetrue`
equals