如何等待element.all得到解决?

时间:2017-03-14 13:35:03

标签: protractor

我正在尝试从列表视图中查找项目的索引。要查找我正在使用此函数的索引

    function restFunction(appName) {
     var indexForItem = 0;
     var a = element.all(by.repeater("app in itemList").column("app.itemName")).each(function (element, index) {
            element.getText().then(function (name) {
                console.log("Name is " + name);
                if (name == "sam") {
                    indexForItem = index + 1;
                    console.log("Ïndex is " + indexForItem );
                    a = index;
                }
            });
        });

        return a;
    }

在量角器中,我怎么能等待上述承诺得到解决。现在,当我打电话给我的restFunction时,我总是在未决状态

中获得承诺

1 个答案:

答案 0 :(得分:0)

您的代码看起来不正确,特别是返回值。您正在返回函数调用 - element.all(locator).each(eachFunction),它将返回一个无法解析为任何内容的Promise。查看文档here

  

返回

     
    

!webdriver.promise.Promise一个承诺,将在何时解决     已在所有ElementFinder上调用函数。承诺会     解析为null。

  

虽然您稍后在呼叫中重新分配值,但由于模式是异步的,因此它不会等到重新分配。

您必须更改它才能直接返回索引

function restFunction(appName) {
    return element.all(by.repeater("app in itemList").column("app.itemName")).each(function (element, index) {
        return element.getText().then(function (name) {
            if (name === "sam") {
                return (index+1);
            }
        });
    });
}

当你调用函数时 - 你必须解决Promise

restFunction('').then(function _resolvePromiseOfCall(value){
    console.log('value')
})