Jasmine 页面对象-承诺处理-错误“;无法读取属性';提交';“未定义”的定义;

Jasmine 页面对象-承诺处理-错误“;无法读取属性';提交';“未定义”的定义;,jasmine,protractor,Jasmine,Protractor,我试图在登录屏幕中点击提交按钮,只有当按钮文本显示“下一步”时。在下面的最后一行中,我得到了一个错误-“无法读取未定义的属性'submit'。我认为我没有正确解析页面对象中的承诺。如果有人能帮我提出解决方案,我将不胜感激 //Login Page object var LoginPage = function () { this.email = element(by.model('loginCtrl.username')); this.password = element(b

我试图在登录屏幕中点击提交按钮,只有当按钮文本显示“下一步”时。在下面的最后一行中,我得到了一个错误-“无法读取未定义的属性'submit'。我认为我没有正确解析页面对象中的承诺。如果有人能帮我提出解决方案,我将不胜感激

//Login Page object

var LoginPage = function () {

    this.email = element(by.model('loginCtrl.username'));
    this.password = element(by.model('loginCtrl.password'));
    this.submit = element(by.css('[ng-click="loginCtrl.login()"]'));

    this.get = function(){
        browser.get('/#/login');
    };

    this.login = function () {

        this.email.clear();
        this.email.sendKeys(browser.params.login.user);

        this.submit.getText().then(function (text) {
            if (text == "Next") {
                //***ERROR below. 
                //***Cannot read property 'submit' of undefined  
                this.submit.click();
            }
    });

在这种情况下,当在
then()
函数中时,
this
不再指向页面对象。一种常见的方法是在外部范围中创建对页面对象的引用:

this.login = function () {

    this.email.clear();
    this.email.sendKeys(browser.params.login.user);

    var self = this;
    this.submit.getText().then(function (text) {
        if (text == "Next") {
            self.submit.click();
        }
     });
}

你期望这个是什么?因为在这种情况下,它没有定义。