javascript - Protractor 函数返回未定义?

标签 javascript protractor

这更多的是一个 JavaScript 问题,但它是尝试使用 Protractor 测试来实现的。

//fileA.js
element(by.id('page-element').getText().then(function() {
    var currentPremium = fileB.getSixMonthPremium(); // calls the function in fileB.js

    element(by.id('page-element').getText().then(function() {
        console.log(currentPremium); // prints undefined
        fileB.compareValue(currentPremium, ..., ...,);
    });
});


//fileB.js
this.getSixMonthPremium() = function() {
    element(by.id('full-premium').isDisplayed().then(function(displayed) {
        if (displayed) {
            element(by.id('full-premium').getText().then(function(currentPremium) {
                console.log('Current Premium - ' + currentPremium); // prints string of $XXX.xx
                return currentPremium; //seems to be returning undefined?
            });
        }
    });
});

当变量currentPremium从函数调用返回后尝试使用它时,它总是未定义的。我究竟做错了什么?

最佳答案

欢迎使用 Javascript 异步调用!

您需要从 getSixMonthPremium() 调用返回一个 Promise,然后在该调用返回后继续工作。

this.getSixMonthPremium() = function() {
    return new Promise(function(resolve,reject){
        element(by.id('full-premium').isDisplayed().then(function(displayed) {
            if (displayed) {
                element(by.id('full-premium').getText().then(function(currentPremium) {
                    console.log('Current Premium - ' + currentPremium); // prints string of $XXX.xx
                    resolve(currentPremium); //seems to be returning undefined?
                });
            }
        });
    })
});

然后你将通过执行以下操作来处理该 promise :

fileB.getSixMonthPremium().then(function(premium){
    ...handle premium
});

关于javascript - Protractor 函数返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42233183/

相关文章:

javascript - 获取将组复选框更改为数组的值

javascript - 如何在 Protractor 中添加新的元素功能

angularjs - 在 Protractor 中的 browser.get() 请求中添加 header

javascript - 委托(delegate) Javascript 函数

javascript - 如果图像文件不存在,则显示另一个图像文件

javascript - 如何从mongodb聚合中获取值

javascript - 使用 css 将 div 移动到新位置然后停在那里

angularjs - 如何使用新 session 重新启动 Protractor 实例?

javascript - 按升序和降序对日期数组进行排序部分不正确的逻辑- Protractor

javascript - npm 脚本 Protractor 命令抛出错误