Protractor-cucumberjs:browser.get()不起作用

时间:2015-10-27 16:44:41

标签: javascript browser cucumber protractor

当我用量角器运行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

1 个答案:

答案 0 :(得分:0)

原因是我忘了在loginpage.js中的set功能中添加括号。替换

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

人:

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