Javascript 当找不到原始元素时,如何单击另一个元素?

Javascript 当找不到原始元素时,如何单击另一个元素?,javascript,testing,protractor,try-catch,Javascript,Testing,Protractor,Try Catch,我创建了一个函数来随机选择付款(数字)。如果找不到第一个选择(编号)(尝试捕捉),则我想选择另一个 但我总是收到: 失败:无法读取属性“单击” 发送号码8时,应选择信用卡visa 我做错了什么?元素确实存在,id也正确: CheckoutPage3.prototype.selectPayment = function (number) { if (number == 1) { try { this.elementPaymentPaypal.clic

我创建了一个函数来随机选择付款(数字)。如果找不到第一个选择(编号)(尝试捕捉),则我想选择另一个

但我总是收到:

失败:无法读取属性“单击”

发送号码8时,应选择信用卡visa

我做错了什么?元素确实存在,id也正确:

CheckoutPage3.prototype.selectPayment = function (number) {
    if (number == 1) {
        try {
            this.elementPaymentPaypal.click().then(function () {
                return 1;
            }, function (err) {
                console.log("payment not found, select new");
                this.elementPaymentCreditCard.click();
                this.elementCreditVISA.click();
                number = 2;
            });
        }
        catch (err) {
            console.log('error occured');
        }
    }
    else if (number == 2) {
        this.elementPaymentCreditCard.click();
        this.elementCreditVISA.click();
        number = 2;
    } else if (number == 3) {
        this.elementPaymentCreditCard.click();
        this.elementCreditMasterCard.click();
        number = 3;
    }
    else if (number == 4) {
        try {
            this.elementPaymentCreditCard.click();
            this.elementCreditAmericanExpress.click().then(function () {
                number = 4;
            }, function (err) {
                console.log("payment not found, select new");
                this.elementCreditVISA.click();
                number = 2;
            });
        }
        catch (err) {
            console.log('error occured');
        }
    }
    else {
        try {
            this.elementPrePayment.click().then(function () {
                number = 5;
            }, function (err) {
                console.log("payment not found, select new");
                this.elementPaymentCreditCard.click();
                this.elementCreditVISA.click();
                number = 2;
            });
        }
        catch (err) {
            console.log('error occured');
        }
    }
};
这是一个,在你的页面对象中,
这个
并不总是你所期望的。例如,在此处的promise resolution函数中:

this.elementPaymentPaypal.click().then(function () {
    return 1;
}, function (err) {
    console.log("payment not found, select new");
    this.elementPaymentCreditCard.click();  // < HERE
    this.elementCreditVISA.click();  // < and HERE
    number = 2;
});
然后使用
self
而不是
this

this.elementPaymentPaypal.click().then(function () {
    return 1;
}, function (err) {
    console.log("payment not found, select new");
    self.elementPaymentCreditCard.click();
    self.elementCreditVISA.click();
    number = 2;
});
this.elementPaymentPaypal.click().then(function () {
    return 1;
}, function (err) {
    console.log("payment not found, select new");
    self.elementPaymentCreditCard.click();
    self.elementCreditVISA.click();
    number = 2;
});