添加来自Web表的定位符的所有值的总和,方法结果仅显示前两个定位符的值

时间:2018-02-09 14:40:35

标签: javascript protractor

我想从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);
    });
  }
};

1 个答案:

答案 0 :(得分:1)

根情况是你在return循环中使用For,因此循环只能迭代一次。

另一个隐藏的代码问题是javascript闭包问题,For循环执行为Sync,但getText()内部循环执行为Async。

如果您删除关键字returnbrowser.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.