Javascript 如何在量角器中的选择元素中返回可用选项列表?

Javascript 如何在量角器中的选择元素中返回可用选项列表?,javascript,protractor,Javascript,Protractor,我正在尝试使用量角器检索select元素中的所有可用选项。我很难弄清楚怎么做,因为我是JavaScript初学者,因此很难确定如何返回数组而不是承诺 我试过这个: getOptions = function () { var self = this; var availableOptions = []; return this.selector.click().then(function () { self.selectorOptions.then(fu

我正在尝试使用量角器检索
select
元素中的所有可用选项。我很难弄清楚怎么做,因为我是JavaScript初学者,因此很难确定如何返回数组而不是承诺

我试过这个:

getOptions = function () {
    var self = this;
    var availableOptions = [];

    return this.selector.click().then(function () {
        self.selectorOptions.then(function (options) {
            options.forEach(function (option) {
                option.getAttribute("value").then(function (value) {
                    availableOptions.push(value);
                });
            });
        });
    }).then(function () {
        return availableOptions;
    });
};
getOptions = function () {
    var self = this;
    var availableOptions = [];

    this.selector.click().then(function () {
        self.cloudletTypeOptions.then(function (options) {
            options.forEach(function (option) {
                option.getAttribute("value").then(function (value) {
                  availableOptions.push(value);
                });
            });
        });
    });

    return availableOptions;
};
这将返回一个承诺,而不是我想要的数组。我也试过:

getOptions = function () {
    var self = this;
    var availableOptions = [];

    return this.selector.click().then(function () {
        self.selectorOptions.then(function (options) {
            options.forEach(function (option) {
                option.getAttribute("value").then(function (value) {
                    availableOptions.push(value);
                });
            });
        });
    }).then(function () {
        return availableOptions;
    });
};
getOptions = function () {
    var self = this;
    var availableOptions = [];

    this.selector.click().then(function () {
        self.cloudletTypeOptions.then(function (options) {
            options.forEach(function (option) {
                option.getAttribute("value").then(function (value) {
                  availableOptions.push(value);
                });
            });
        });
    });

    return availableOptions;
};

当我这样做并从测试中调用该方法并尝试打印结果时,它是“未定义的”。我需要做什么来确保返回值已定义并且是数组?除此之外,我如何强制承诺解决?

据我所知,您正在寻找:

将映射函数应用于
ElementArrayFinder
中的每个元素。 回调函数接收
ElementFinder
作为第一个参数和 将索引作为第二个参数


据我所知,您正在寻找:

将映射函数应用于
ElementArrayFinder
中的每个元素。 回调函数接收
ElementFinder
作为第一个参数和 将索引作为第二个参数


不久前提出了一个很好的选择选项抽象:。我希望这个抽象存在。这将使处理这些组件变得更加容易。是的,你可以将其复制到你的项目中,要求并使用..问题中提出的解决方案返回web元素。我正在尝试编写一个方法,该方法返回特定于域的选项列表。我从我在问题中发布的代码中去掉了这一点,因为我认为这会分散对如何获取数组而不是承诺或未定义值的问题的注意力。不久前提出了一个很好的选择选项抽象:。我希望这个抽象存在。这将使处理这些组件变得更加容易。是的,你可以将其复制到你的项目中,要求并使用..问题中提出的解决方案返回web元素。我正在尝试编写一个方法,该方法返回特定于域的选项列表。我从我在问题中发布的代码中去掉了这一点,因为我认为这会分散对如何获取数组的注意力,而不是承诺或未定义的值。谢谢。这起作用了。在我的测试中,我必须像这样调用它来获取值而不是承诺:getOptions()。然后(函数(选项){console.log(选项);})谢谢。这起作用了。在我的测试中,我必须像这样调用它来获取值而不是承诺:getOptions().then(函数(选项){console.log(选项);})