试图访问嵌套函数," undefined不是函数"

时间:2015-07-24 05:35:29

标签: javascript protractor pageobjects

我正在使用JavaScript(Protractor)进行一些端到端测试。我有一个包含以下内容的PageObjects文件:

var SomeClass = function() {
    this.get = function() {
        browser.get('http://blah');
    };

    this.person = function() {
        var firstNameInput = element(by.id('firstName'));
        var lastNameInput = element(by.id('lastName'));

        this.setTitle = function(title) {
            element(by.xpath('//select[@id="title"]/option[text()="' + title +'"]')).click();
        };

        this.setFirstName = function(firstName) {
            firstNameInput.sendKeys(firstName);
        };

        this.setLastName = function(lastName) {
            lastNameInput.sendKeys(lastName);
        };
    };
};

module.exports = new SomeClass();

在我的规范中,我试图像这样访问嵌套函数:

describe('some test', function() {
    var someClass = require('./some_class.po.js');
    var data = require('./some_class.data.json');

    it('do stuff', function() {
        someClass.get();
        someClass.person.setTitle(data.title);
        someClass.person.setFirstName(data.firstName);
        someClass.person.setLastName(data.lastName);
    });
});

当我尝试运行此测试时,较高级someClass.get()工作正常,但当它尝试执行someClass.person.setTitle(data.title)时,我收到Failed: undefined is not a function消息。

知道我做错了什么吗?我只使用制定者,没有吸气剂。不要以为我需要退货。

1 个答案:

答案 0 :(得分:2)

您需要对代码进行一些更改才能访问inner的{​​{1}}个功能。在person()末尾添加了return this,以便可以从person()外部访问person()的内部属性和方法。

请参阅以下代码中突出显示的更改。

person()

然后,您可以按照以下方式访问var SomeClass = function() { this.get = function() { browser.get('http://blah'); }; this.person = function() { var firstNameInput = element(by.id('firstName')); var lastNameInput = element(by.id('lastName')); this.setTitle = function(title) { element(by.xpath('//select[@id="title"]/option[text()="' + title + '"]')).click(); }; this.setFirstName = function(firstName) { firstNameInput.sendKeys(firstName); }; this.setLastName = function(lastName) { lastNameInput.sendKeys(lastName); }; return this; // ^^^^^^^^^ }; }; module.exports = new SomeClass();

setTitle

<强>演示

someClass.person().setTitle(data.title)
//              ^^