1

我对 Protractor 和 Javascript 完全陌生。我正在尝试编写一个测试脚本,它可以在标题“收入”下获取某些帐户的值(下图)

收入表头

我需要获取收入标题下填充的所有数值并执行“S​​UM”操作。问题是,我无法使用循环或ng-repeat. 下面是我的 DOM 的样子: 收入 DOM

如上图所示,我有一些 89 td/tr标签。tbody

有人可以帮助我了解如何使用 获取所有值tbody并为获取的值执行 SUM 操作的逻辑吗?

4

1 回答 1

0

有了这个,你将拥有你想要的:

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 并与预期值进行比较(或者干脆做其他事情)

于 2018-11-09T13:22:12.973 回答