javascript - 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;
}
})
}
};
我得到:“非法中断声明”
如何真正做到这一点?
我必须定义“定位器”两次吗?
解决方案
您可以使用element.all()
查找所有td
第 3 列,然后使用map()
将每个文本值转换td
为Number
.
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);
})
推荐阅读
- prolog - 在不多次使用 call_nth/2 或使用 findall/3 的情况下找到所需的解决方案?
- php - 我有一个导航栏问题,在将 PHP 代码添加到 html 时它会变大,否则仍然可以
- angular - Angular 2,带有可观察的管道测试没有转换访问
- javascript - chart.js 和 vue 的问题
- python - Python递归函数,索引超出范围
- oauth-2.0 - 如果我们不需要 SSO 或 OAuth 2,我们的身份服务器是否必要?
- javascript - OverlappingMarkerSpiderfier - 谷歌地图 - 获取可蜘蛛标记的特殊图标
- c# - C# Entity Framework 6 项目构建但没有从数据库中显示数据
- c# - 在 Python3 中是否有与 C# 中的 xmlDoc.LoadXml(myStr) 等价的东西?
- python - 跨列查找位平均值的有效方法