Reputation: 93
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
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