当我用量角器运行cucumberjs时,我收到错误消息,任何人都可以帮助我提出理由:
C:\用户\ Dave.Le \应用程序数据\漫游\ NPM \ node_modules \量角器\ node_modules \硒的webdriver \ lib中\原子\ error.js:108 var template = new Error(this.message); ^ NoSuchElementError:无法找到元素:{“method”:“id”,“selector”:“log”} 有关此错误的文档,请访问:http://seleniumhq.org/exceptions/no_such_element.html 构建信息:版本:'2.47.1',修订版:'411b314',时间:'2015-07-30 03:03:16' 系统信息:主机:'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.version:未知 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) 在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) 在[对象的对象] .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) 在[对象的对象] .promise.Promise.notifyAll_(C:/Users/Dave.Le/AppData/Roaming/npm/node_modules/protractor/node_modules/selenium-webdriver/lib/goog /../的webdriver / promise.js: 553:15) 在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]进程已退出,错误代码为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
答案 0 :(得分:0)
原因是我忘了在loginpage.js中的set功能中添加括号。替换
LoginPage.prototype.navigate = navigate;
LoginPage.prototype.login = login;
人:
LoginPage.prototype.navigate = navigate();
LoginPage.prototype.login = login();