量角器页面对象 - TypeError:对象#<object>没有方法'methodName'</object>

时间:2014-08-27 04:21:43

标签: javascript angularjs protractor pageobjects

我正在尝试使用页面对象模式编写一个简单的测试 - 基于“docs/page-objects”。

我创建了一个描述页面对象的文件,另一个使用此页面对象来测试页面。

//page object
var LoginPage = function() {

this.userInput = browser.driver.findElement(by.id('username'));
this.pwdInput  = browser.driver.findElement(by.id('password'));
this.btnEnter  = browser.driver.findElement(by.id('btnLogin'));

this.get = function(){
    browser.get('http://example.com');
};

this.setUser = function (user){
    this.userInput.sendKeys(user);  
};

this.setPasswd = function (password) {
    this.pwdInput.sendKeys(password);
};

this.clickBtnEnter = function (){
    btnEnter.click();
};};

规范文件:

var loginPage = require('./LoginPage.js');
describe('myApp', function() {
  it('should save contract config', function (){        
    loginPage.get();
    loginPage.setUser('userid');
    loginPage.setPasswd('passwd');
    loginPage.clickBtnEnter();
  });
});

运行此测试时会显示以下错误: TypeError:对象#没有方法'get' - 在此行:loginPage.get();.

当我在搜索这个问题时,我发现了在Protractor中使用页面对象的各种方法,例如Astrolable。 现在我不确定页面对象的正确用法。

您对我如何修复此测试有任何想法吗?

谢谢你们。

2 个答案:

答案 0 :(得分:1)

试试这个:

确保LoginPage.js文件中包含以下内容

module.exports = LoginPage;

添加缺少的new关键字

var LoginPage = require('./LoginPage.js');
var loginPage = new LoginPage();

答案 1 :(得分:0)

尝试上述语法后(没有成功)我使用Astrolable重写了页面对象。现在它有效!我的测试看起来像这样:

//pageobject
'use strict';
var env = require('./environment.js')

var LoginPage = function () {
  browser.driver.get('http://example.com');
};

LoginPage.prototype = Object.create({}, {

userInput:         {    get: function()    { return browser.driver.findElement(by.id('username'));}},
pwdInput:          {    get: function() { return browser.driver.findElement(by.id('password'));}},
btnEnter:          {    get: function()    { return browser.driver.findElement(by.id('btnLogin'));}},

setUser:           {     value: function (loginName) {
    this.userInput.sendKeys(loginName);        
}},

setPasswd: { value: function (loginPass) {
    this.pwdInput.sendKeys(loginPass);
}},

clickBtnEnter:    {    get: function()    { return this.btnEnter.click();}}    
});

module.exports = LoginPage;

规格文件:

'use strict';
var loginPage = require('./LoginPage.js');

describe('myApp', function() {
    var poLogin = new loginPage();

    it('should save contract config', function (){        
        poLogin.setUser('userid');
        poLogin.setPasswd('passwd');
        poLogin.clickBtnEnter;
    });
});

现在工作正常。 谢谢你回答。