selenium - Functional testing with grunt-webdriver, mocha and chai-as-promised -
i'm trying build functional testing system verify our web site behaving correctly our users. have cobbled bunch of node.js modules , helpers in attempt framework provides simple, concise tests without heap of nested function callbacks , believe promises can provide that, package.json
file looks this:
"dependencies": { "chai-as-promised": "^4.3.0", "grunt": "^0.4.5", "grunt-webdriver": "^0.4.8" }
my gruntfile.js
looks this:
module.exports = function(grunt) { grunt.initconfig({ webdriver: { // use webdriver.io options: { desiredcapabilities: { browsername: 'phantomjs' // no xvfb required } }, chrome: { tests: ['chrome/*.js'], options: { desiredcapabilities: { browsername: 'chrome' } } }, }, }); grunt.loadnpmtasks('grunt-webdriver'); grunt.registertask('default', ['webdriver']); };
and test case in chrome/login.js
looks this:
'use strict'; var chai = require('chai'), chaiaspromised = require('chai-as-promised'), assert; chaiaspromised.transferpromiseness = browser.transferpromiseness; chai.use(chaiaspromised); assert = chai.assert; describe('login test', function () { it('verifies user can log in', function(done) { browser .url('https://localhost/') .setvalue('#userauth_username','foo') .setvalue('#userauth_password',"password") .submitform('#form_users_login') .then(function(){ browser.gettext('#auth-user-id', function(err, value){ console.log(value); }); assert.becomes(browser.gettext('#auth-user-id'), 'foo'); })//.call(done); }); });
when run grunt webdriver:chrome
on command line, see start chrome , log website. 'auth-user-id' span correctly displaying user's id after logging in reason browser.gettext()
not returning , test therefore failing. have tried adding .pause(100)
after .submitform()
give me time interact page in chrome know problem in test case.
what doing wrong?
this seems best , succinct way of doing want. i'm not sure need chai-as-promised
yet maybe i'll move login function included file , use chai-as-promised assert promised login has occurred before entering tests.
'use strict';
var chai = require('chai'), chaiaspromised = require('chai-as-promised'), assert, expect; chaiaspromised.transferpromiseness = browser.transferpromiseness; chai.use(chaiaspromised); assert = chai.assert; expect = chai.expect; describe('login test', function () { it('verifies user can log in', function(done) { browser .url('https://localhost/') .setvalue('#userauth_username','foo') .setvalue('#userauth_password',"password") .submitform('#form_users_login') .waitforexist('#auth-user-id') .gettext('#auth-user-id') .then(function(text){ //console.log('username: ' + text); assert.equal(text, 'foo'); }) .savescreenshot('out.png') .call(done) }); it('should not display logincontrols after login', function(done){ browser .isvisible('#logincontrols') .then(function(bool){ expect(bool).to.be.false; }) .call(done) }); it('should display loggedin section after login', function(done){ browser .isvisible('#loggedin') .then(function(bool){ expect(bool).to.be.true; }) .call(done) }); });
and completeness, see on output:
# grunt webdriver:chrome running "webdriver:chrome" (webdriver) task login test ✓ verifies user can log in (7691ms) ✓ should not display logincontrols after login (70ms) ✓ should display loggedin section after login (58ms) 3 passing (8s) done, without errors.
Comments
Post a Comment