我想从Web表中添加定位器的所有值,但它只添加前两个值。这是我的方法声明。
exports.GetMonthsFWSeasonSTDPreMkdValues = () => {
var total_value;
for(var month_index = 9; month_index <= 18 ; month_index++){
const elm_xpath = utils.GetXpathForSubCategory(chosen_season_index, month_index);
return browser.element(by.xpath(elm_xpath)).getText().then(function(response_total_months_index_values){
total_value += response_total_months_index_values;
console.log('total value' ,total_value);
});
}
};
答案 0 :(得分:1)
根情况是你在return
循环中使用For
,因此循环只能迭代一次。
另一个隐藏的代码问题是javascript闭包问题,For
循环执行为Sync,但getText()
内部循环执行为Async。
如果您删除关键字return
,browser.element(by.xpath(elm_xpath)).getText()
将重复使用month_index = 18的elm_xpath
exports.GetMonthsFWSeasonSTDPreMkdValues = () => {
var promises = [];
for(var month_index = 9; month_index <= 18 ; month_index++){
const elm_xpath = utils.GetXpathForSubCategory(chosen_season_index, month_index);
promises.push(element(by.xpath(elm_xpath)).getText());
}
return Promise.all(promises).then(function(data){
return data.reduce(function(accumulator, currentValue){
return accumulator + currentValue * 1;
}, 0);
});
};
//Remind: this function return a promise.