Luasg
Luasg

Reputation: 93

Protractor-cucumberjs: browser.get() does not work

When i run cucumberjs with protractor, i get error message, anyone can help me raise reason:

c:\Users\Dave.Le\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\atoms\error.js:108 var template = new Error(this.message); ^ NoSuchElementError: Unable to locate element: {"method":"id","selector":"log"} For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html Build info: version: '2.47.1', revision: '411b314', time: '2015-07-30 03:03:16' System info: host: 'DaveLe-PC', ip: '192.168.1.16', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_75' Driver info: driver.version: unknown at new bot.Error (c:\Users\Dave.Le\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\atoms\error.js:108:18) at Object.bot.response.checkResponse (c:\Users\Dave.Le\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\atoms\response.js:109:9) at c:\Users\Dave.Le\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:379:20 at [object Object].promise.ControlFlow.runInFrame_ (c:/Users/Dave.Le/AppData/Roaming/npm/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:1857:20) at [object Object].goog.defineClass.notify (c:/Users/Dave.Le/AppData/Roaming/npm/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:2448:25) at [object Object].promise.Promise.notify_ (c:/Users/Dave.Le/AppData/Roaming/npm/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:564:12) at Array.forEach (native) at [object Object].promise.Promise.notifyAll_ (c:/Users/Dave.Le/AppData/Roaming/npm/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:553:15) at goog.async.run.processWorkQueue (c:\Users\Dave.Le\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\async\run.js:130:15) at process._tickDomainCallback (node.js:409:9) [launcher] Process exited with error code 1

----------------------loginpage.js-------------------

'use strict';

( function () {

var navigate = function () {
    browser.get( 'http://store.demoqa.com/products-page/your-account/' );
};

var login = function ( username, password ) {
    this.username.sendKeys( username );
    this.password.sendKeys( password );
    this.loginButton.click();
};

var LoginPage = function () {
    this.username     = dv.findElement( by.id( 'log' ) );
    this.password     = dv.findElement( by.id( 'pwd' ) );
    this.loginButton  = dv.findElement( by.id( 'login' ) );
};

LoginPage.prototype.navigate = navigate;
LoginPage.prototype.login    = login;

module.exports = LoginPage;

} )();

------------------------spec.js---------------------

'use strict';

var LoginPage      = require( '../login/loginpage.js' );

var HomePage       = require( '../../features/homepage/homepage.js' );

var chai           = require( '../../chai' );

var chaiAsPromised = require( '../../chai-as-promised' );

chai.use( chaiAsPromised );

var expect = chai.expect;

module.exports = function () {

var loginPage;
var homePage;

this.Before( function ( callback ) {
    loginPage = new LoginPage();
    homePage  = new HomePage();
    isAngularSite(false);
    loginPage.navigate();
    callback();

} );

this.After( function ( callback ) {
    //logout
    callback();
} );

// First Scenario
//this.When('I am in login page')

this.Given(/^I login using valid creadentials$/, function ( callback ) {

    loginPage.login( 'username', 'password' ); //valid creadential
    callback();
} );

this.Then(/^I should be logged in$/, function ( callback ) {
    expect(homePage.homeIndicator).toEqual('http://someUrl.com/#home');
    callback();
} );

};

----------------------config.js------------------

'use strict';

var config = {

seleniumAddress : 'http://localhost:4444/wd/hub',
specs           : [ 'features/login/login.feature' ],
baseUrl         : 'http://store.demoqa.com/',
capabilities    : {
browserName : 'firefox'
},

onPrepare   : function () {
var width  = 1024;
var height = 600;

global.dv = browser.driver;

dv.manage().window().setSize( width, height );

// This will tell the Protractor not to wait for angular
global.isAngularSite = function(flag) {
    browser.ignoreSynchronization = !flag;
};
},

framework : 'cucumber',

cucumberOpts : {
// define your step definitions in this file
require : 'features/login/spec.js',
//format  : 'pretty'
}

};

exports.config = config;

---------------login.feature-----------------

Feature: Login

As a user, I should be able to have login creadentials so that I can login to    the system

Scenario: Valid login creadentials

Given I login using valid creadentials

Then I should be logged in

Upvotes: 0

Views: 906

Answers (1)

Luasg
Luasg

Reputation: 93

The reason is i forgot add bracket in set function in loginpage.js. Replace

LoginPage.prototype.navigate = navigate;
LoginPage.prototype.login    = login;

By:

LoginPage.prototype.navigate = navigate();
LoginPage.prototype.login    = login();

Upvotes: 0

Related Questions