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

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

[C++][SFML 2.2] Strange Performance Issues - Moving Mouse Lowers CPU Usage -

ios - Possible to get UIButton sizeThatFits to work? -