首页 文章

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

提问于
浏览
0

当我用量角器运行cucumberjs时,我收到错误消息,任何人都可以帮助我提出理由:

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:无法找到元素:{“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:未知新bot.Error(c:\ Users \在Object.bot.response.checkResponse(c:\ Users \ Dave.Le \)的Dave.Le \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ atoms \ error.js:108:18)应用程序数据\漫游\ NPM \ node_modules \量角器\ node_modules \硒的webdriver \ lib中\原子\ response.js:109:9),在C:\用户\ Dave.Le \应用程序数据\漫游\ NPM \ node_modules \量角器\ node_modules \硒的webdriver \ lib中\的webdriver \ webdriver.js:379:20在[对象的对象] .promise.ControlFlow.runInFrame_(C:/Users/Dave.Le/AppData/Roaming/npm/node_modules/protractor/node_modules/selenium- webd river / 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 /量角器/ node_modules /硒的webdriver / LIB / goog /../的webdriver / promise.js:564:12)在Array.forEach(天然)在[对象的对象] .promise.Promise.notifyAll_(C:/用户/Dave.Le/AppData/Roaming/npm/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:553:15)在goog.async.run.processWorkQueue(C:\用户\ Dave.Le \应用程序数据\漫游\ NPM \ node_modules \量角器\ node_modules \硒的webdriver \ lib中\ goog \异步\ run.js:130:15)在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

    原因是我忘了在loginpage.js中的set函数中添加括号 . 更换

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

    通过:

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

相关问题