量角器的Page对象 - 类型错误:对象#<对象>没有实现方法“methodName”对象、量角器、错误、类型

2023-09-13 04:02:47 作者:@ 凉宸

我想写使用页面一个简单的测试对象模式 - 基于的文档/页对象。

I'm trying to write a simple test using page objects pattern - based on the 'docs/page-objects'.

我创建描述使用此页面对象来测试页面的页面对象和其他文件。

I created a file describing the page object and other using this page object to test a page.

//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();
  });
});

当我运行这个测试将显示以下错误:类型错误:对象#没有方法'得到' - 在这一行:loginPage.get();

The following error is shown when I run this test: TypeError: Object # has no method 'get' - at this line: loginPage.get();.

当我正在寻找这个问题,我发现关于使用量角器页面对象的各种方法,如 Astrolable 。现在我不知道页面对象的正确用法。

When I was searching for this problem I found various approaches about using page objects in Protractor, such as Astrolable. Now I am not sure about the correct usage of page objects.

你有,我怎么能解决这个测试什么想法?

Do you have any ideas about how I can fix this test?

感谢你们。

推荐答案

在尝试上述语法(没有成功)之后,我改写了使用的 Astrolable 。现在,它的作品!我的测试是这样的:

After trying the above syntax (no success) I rewrote the page object using the Astrolable. Now it works! My test looks like this:

//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;
    });
});

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

Now it is working fine. Thanks for answering.