我对 Protractor 和 Javascript 完全陌生。我正在尝试编写一个测试脚本,它可以在标题“收入”下获取某些帐户的值(下图)
我需要获取收入标题下填充的所有数值并执行“SUM”操作。问题是,我无法使用循环或ng-repeat
. 下面是我的 DOM 的样子:
如上图所示,我有一些 89 td
/tr
标签。tbody
有人可以帮助我了解如何使用 获取所有值tbody
并为获取的值执行 SUM 操作的逻辑吗?
我对 Protractor 和 Javascript 完全陌生。我正在尝试编写一个测试脚本,它可以在标题“收入”下获取某些帐户的值(下图)
我需要获取收入标题下填充的所有数值并执行“SUM”操作。问题是,我无法使用循环或ng-repeat
. 下面是我的 DOM 的样子:
如上图所示,我有一些 89 td
/tr
标签。tbody
有人可以帮助我了解如何使用 获取所有值tbody
并为获取的值执行 SUM 操作的逻辑吗?
有了这个,你将拥有你想要的:
function sumValueInColumn(tableID, columnNumber, expectedResult){
var expectedCells = element.all(by.css('#'+tableID+' tr td:nth-of-type(2)'));
var currentSum = 0;
expectedCells.each((eachCell) => {
eachCell.getText().then((cellText) => {
currentSum += Number(cellText);
});
}).then(() => {
expect(currentSum.toString()).toEqual(expectedResult);
});
}//END OF sumValueInColumn
所以,我将逐行解释
在这一行中,您正在从表和特定列中捕获所有列值。将 var tableID 替换为表的 id (或其他 css 选择器)代码部分“nth-of-type(2)”是关于列的,所以在你的情况下,第二列的数字是 2 ......你可以做这样的事情可以从函数的参数中接收值:
var expectedCells = element.all(by.css('#'+tableID+' tr td:nth-of-type('+columnNumber+')'));
所以现在 var expectedCells 有一个包含所有数字的数组(作为字符串)
在这一部分中,您将获取数组,获取每个位置的文本,转换为数字并执行您想要的数学运算(总和): *在您的情况下,在转换为数字之前处理字符串,确保您是只发送数字
expectedCells.each((eachCell) => {
eachCell.getText().then((cellText) => {
currentSum += Number(cellText);
});
})
最后一部分是承诺的顺序,它允许您使用 var currentSum 并与预期值进行比较(或者干脆做其他事情)