我正在尝试使用Protractor检索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;
});
};
这会返回一个promise而不是我想要的数组。我也试过这个:
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;
};
当我这样做并从测试中调用该方法并尝试打印结果时,它是'未定义'。我需要做些什么来确保定义返回值并且是一个数组?除此之外,我如何强制承诺解决?
答案 0 :(得分:0)
根据我的理解,您正在寻找map()
:
将地图功能应用于
ElementArrayFinder
中的每个元素。 回调接收ElementFinder
作为第一个参数和。{ 索引作为第二个arg。
getOptions = function () {
var self = this;
return this.selector.click().then(function () {
return self.selectorOptions.map(function (option) {
return option.getAttribute("value").then(function (value) {
return value;
});
});
});
};