首页 > 解决方案 > Javascript Protractor 从列中获取所有值并将它们相加

问题描述

我想从网页上的表格中的列中获取所有值,直到该列不包含元素,求和值并将总和作为承诺返回。

   TablePage.prototype.getPriceValuesFromList = function () {
      for (number = 1; number < 100; number++) {
          var locator = '//*[@id="root"]/main/section/table/tbody/tr[' + number + ']/td[3]/div[2]';
            browser.findElement(By.xpath(locator)).then(function (success) {
            if (success) {
                var locator = '//*[@id="root"]/main/section/table/tbody/tr[' + number + ']/td[3]/div[2]';
                return element(By.xpath(locator)).getText().then(function (text) {
                    numb = text.replace(/,/g, '');
                    numb = numb.replace(/\$/g, '');
                    numb = numb.replace(/\./g, '');
                    prices[number] = parseInt(numb);
                    console.log(prices[number]);
                    var sum = prices.reduce(function(a, b) { return a + b; }, 0);
                    console.log(sum);
                    return sum
                })
            }
            else {
                break;
                }
            })
      }
    };

我得到:“非法中断声明”

如何真正做到这一点?

我必须定义“定位器”两次吗?

标签: javascriptpromisesumprotractor

解决方案


您可以使用element.all()查找所有td第 3 列,然后使用map()将每个文本值转换tdNumber.

TablePage.prototype.getPrice2List = function(){

    return element
        .all(by.css('#root table tbody tr > td:nth-child(3)'))
        .map(function(item){
            // replace all non-numeric,non-dot, not-dash to ''
            return Number(item.replace(/[^\d\.-]/g, '').trim());
        });
};

tablePage.getPrice2List().then(function(prices){
    console.dir(prices);
})

推荐阅读