0
votes

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
1
Are you sure you are using proper locator for the line - this.username = dv.findElement( by.id( 'log' ) ); ? Error clearly states that there is no such element in your DOMGirish Sortur
i am sure about locator, the problem is firefox open but the url is not load, address bar of browser is blank.Luasg
Can you try removing baseUrl from the conf.js file and see if it helps? ThanksGirish Sortur
@GirishSortur: Thank for your response, i tried remove baseurl but same issue still occurs.Luasg

1 Answers

0
votes

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();