页面对象 - 承诺处理 - 错误"无法读取属性'提交'未定义"

时间:2016-05-29 01:44:19

标签: jasmine protractor

我试图点击登录屏幕中的提交按钮,仅当按钮文本显示"下一步"。在下面的最后一行中,我收到错误 - "无法读取属性'提交'未定义"。我认为我没有在页面对象中正确地解决承诺。如果有人能帮忙提出解决方案,我会很感激。

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

1 个答案:

答案 0 :(得分:3)

在这种情况下,当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();
        }
     });
}