量角器 - 如何从一列中获取所有单元格并在网格具有 id= "0-0" 对于行-列时对它们求和



我正在测试的门户中验证向下钻取过程,为此我的脚本正在执行: 从表的第一行读取值并单击此值(某些单元格有一个链接,用于向下钻取到详细信息页面) 要单击此特定单元格,我正在使用它的ID:

<table id="transHistTable" class="table table-hover  table-bordered table-striped dataTable no-footer" style="width: 100%" role="grid" aria-describedby="transHistTable_info">
<thead>
<tbody>
<tr role="row" class="odd">
<td id="0-0" class="ng-scope">31 Jul 2018</td>
<td id="0-1" class="ng-scope">RandomText0</td>
<td id="0-2" class="ng-scope">RandomText1</td>
<td id="0-3" class="ng-scope">EmptyValue</td>
<td id="0-4" class="ng-scope">Value I Click And Save it</td>

因此,对于此表,我直接单击第 0 行第 4 列,因为我的数据和过滤器总是只会带来一行,但是,我的问题来了...... 执行向下钻取时,我永远不知道我将有多少行,因为它取决于用户操作。 我需要执行验证以将向下钻取后显示的表中所有值的总和与从表"transHistTable"第 0 行第 4 列捕获的值进行比较

这是我在执行向下钻取后获得的值:

<table id="transHistDetailTable" class="table table-hover  table-bordered table-striped dataTable no-footer" style="width: 100%" role="grid" aria-describedby="transHistDetailTable_info">
<thead>
</thead>
<tbody><tr role="row" class="odd">
<td id="0-0" class="ng-scope">Site</td>
<td id="0-1" class="ng-scope">Date</td>
<td id="0-2" class="ng-scope">Time</td>
<td id="0-3" class="ng-scope">I</td>
<td id="0-4" class="ng-scope">value 1</td>
<td id="0-5" class="ng-scope">value 2</td>
<td id="0-6" class="ng-scope">value 3</td>
<td id="0-7" class="ng-scope">12</td>
</tr></tbody>
</table>

所以我想做的是读取所有行(可能是 0,1,2,3,4,5...)保存存储在第 7 列中的值,然后在完成后,执行求和,然后与我从第一个表中保存的值进行比较。

我的代码是这样的:

var rowstransHistDetail = element(by.id('transHistDetailTable')).all(by.tagName("tr"));
rowstransHistDetail.count().then(function(rcount){
//In case only 1 row is displayed
if (rcount < 3)
{
element(by.id('0-7')).getText().then(function(valueQty){  
expect(valueQty).toEqual(600)
})
}
else
{
var tempValue
for (i=0; i < rcount; i++)
{
element(by.id(i+'-7')).getText().then(function(valueQty){
tempValue = Number(tempValue) + Number(valueQty)
})
}
expect(tempValue).toEqual(600);
}
});

但是当我执行这个时,给了我一个未定义的值

有什么想法可以解决这个问题吗?

谢谢!!!!

似乎您在执行之前在循环中递增一个值。 看这里: https://stackoverflow.com/a/6867907/6331748

应该蜜蜂i++而不是循环++i

如果我错了,请给我留言。

====

============================编辑: 这是我这边的一些代码:

var expectedCells = element.all(by.css('#transHistDetailTable tr td:nth-of-type(5)'));
var currentSum = 0;
expectedCells.each((eachCell) => {
eachCell.getText().then((cellText) => {
currentSum += Number(cellText);
});
}).then(() => {
expect(currentSum).toEqual(600);
});

抱歉,无法测试它。我只想分享一个主要想法并详细说明它。

expectedCells都是id=n-4细胞。我们遍历所有元素并从中获取文本,更改为数字类型并添加到当前值。事后,我们做一个断言。

看起来if声明也不一定。 让我知道它是如何工作的。

针对您的问题的两个选项:

1) 使用element.all().reduce()

let total = element
.all(by.css('#transHistDetailTable > tbody > tr > td:nth-child(8)'))
.reduce(function(acc, item){
return item.getText().then(function(txt) {
return acc + txt.trim() * 1;
});
}, 0);
expect(total).toEqual(600);

2) 使用element.all().getText()Array.reduce

let total = element
.all(by.css('#transHistDetailTable > tbody > tr > td:nth-child(8)'))
.getText(function(txts){ //txts is a string Array
return txts.reduce(function(acc, cur){
return acc + cur * 1;
}, 0);
});
expect(total).toEqual(600);

最新更新