我正在验证我正在测试的门户中的向下钻取过程,为此,我的脚本正在执行以下操作: 从表的第一行读取值,然后单击该值(某些单元格具有执行向下钻取到详细信息页面的链接) 要单击此特定单元格,请使用其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);
}
});
但是当我执行此操作时,给了我一个未定义的值
有什么想法请解决这个问题吗?
谢谢!!!!
答案 0 :(得分:1)
似乎您在执行之前在循环中增加了一个值。 看到这里: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 :(得分:1)
您的问题有两个选择:
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);