使用量角器时如何从内部函数中获取值

How to get value from inner function when using Protractor

我正在尝试 return 作为按钮集合一部分的按钮的索引值。我花了很多时间审查闭包,但由于这是量角器,所以有些信息似乎并不一致。这是我目前的位置:

我将按钮列表收集到 arrayElement - [button1, button2, button3]。 我有一个目标元素...即 button2

如果我要查找的按钮与我的目标元素匹配,我需要索引。

这是我的代码:

var targetComponent = 'buttons2';
var buttonIndex;
var components;

browser.actions().mouseMove(homePage.componentIcon).perform();
components= homePage.gatherComponents();
buttonIndex = getIndex();

function getIndex () {
                components.each(function (component, compIndex) {
                    component.getText().then(function (name) {
                        if (name === targetComponent) {
                            return compIndex;
                        }
                    });
                });
        }

如果确实需要索引,可以用map()解决:

function getIndex () {
    return components.map(function (component, compIndex) {
        return {
            text: component.getText(),
            index: compIndex
        };
    }).then(function (results) {
        for (var i = 0; i < results.length; i++) {
            if (results[i].text === targetComponent) {
                return results[i].index;
            }
        }
    });
}

但是,如果您需要按文本过滤掉实际按钮,这是 filter():

的一个很好的用例
function getButton(targetComponent) {
    return components.filter(function (component) {
        return component.getText().then(function (text) {
            return targetComponent === text;
        });
    }).first();
}