无法阅读财产' Msgtext'使用量角器执行时未定义的

时间:2016-12-08 09:02:14

标签: protractor

我在我的PO文件中创建了一个函数,如下所示

'use strict';

var FunLib = function(){

this.Msgtext = element(by.css('.layout-row.flex-gt-md-66.flex'));
this.AltEle = element(by.css('[ng-show="alert"]'));
this.ExcMsg1 = "YOU ARE LACKING ONE OR MORE..."

//Function Button Click
this.ButtonClick = function(ButtonName){
    this.ButtonName = ButtonName;
    this.Button = element(by.buttonText(ButtonName));
    this.Button.click();
};

//Function to handle exception of Permissions
this.PermissionExc = function() {
    this.AltEle.isDisplayed().then(function(IsPresent){
        console.log(IsPresent);
        if (IsPresent) {
            this.Msgtext.getText().then(function(text) {
                console.log(text);
                var Message = text;
                if (Message == this.ExcMsg1) {
                    this.ButtonClick('Close');
                }
            });

        }
    });
    browser.sleep(2000);
}
};
module.exports = FunLib;

在我的spec文件中,我使用它如下,

FuncLib.PermissionExc();

当我执行我的代码时,我收到错误" TypeError:无法读取属性' Msgtext'未定义的"。 谁能告诉我哪里出错了?请建议。

1 个答案:

答案 0 :(得分:1)

这是一个着名的js闭包问题。您无法在嵌套函数中访问this.Msgtext。因为您使用的 this 的范围没有Msgtext

this.PermissionExc = function() {
  var _this = this;
this.AltEle.isDisplayed().then(function(IsPresent){
    console.log(IsPresent);
    if (IsPresent) {
        _this.Msgtext.getText().then(function(text) {
            console.log(text);
            var Message = text;
            if (Message == this.ExcMsg1) {
                this.ButtonClick('Close');
            }
        });

    }
});
browser.sleep(2000);
}

同样适用于其他人