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