我正在使用量角器-黄瓜框架中的打字稿编写e2e测试。对于我的测试,我想将UI中的HTML表与黄瓜数据表进行比较。最初,我要做的就是尝试获取每个单元格的文本,但是我面临遍历表格的问题。这是我的代码,我是Typescript和javascript的新手,我混合了所有语法。如果代码看起来不好,请原谅。任何指针都表示赞赏。
getCellText() {
console.log('I am here');
//'brickletrows' is my page object equivalent of 'tbody tr'
this.brickletrows.array.forEach(element => {
let cells = element.$$('td');
console.log(cells.getText);
});
}
我收到错误消息:TypeError:无法读取上述属性的未定义属性'forEach'
async getCelltexts() {
//this.Bricklet_table_columns is my page object the equivalent of 'tbody tr td'
let someArray = [this.Bricklet_table_columns];
for (let cell of someArray) {
{
await console.log(cell.getText());
}
}
} 在控制台上为此打印了一堆乱码。 我的最终目标是将单元格放置在2D数组中,以便我可以使用chai库使用我在此处形成的2D数组声明黄瓜表。 有人可以指出我正确的方向。
我无法在此处发布DOM,因为它是敏感信息。但是该表与任何具有表ID,tbody,th,tr,td标签的HTML表非常相似
答案 0 :(得分:0)
为了能够以正确的顺序存储元素,我们可以依靠索引。 ElementArrayFinder.each()
在其回调中提供索引作为第二个参数。
由于您要比较整个表,因此逐行比较就足够了,并且不必将所有值都作为单个值。新功能看起来会更好一些,如下所示:
async getCellValues(): Promise<string[]> {
return new Promise<string[]>(async function (resolve, reject) {
let table = element(by.css('#myTableID'));
let rows = table.all(by.css('tr'));
let rowCount = await rows.count();
let rowValues = new Array(rowCount);
rows.each(async (row, index) => {
let text = await row.getText();
rowValues[index] = text.trim();
}).then(function() {
resolve(rowValues);
});
});
}
答案 1 :(得分:0)
因此,以下代码在某种程度上可以正常工作-从某种意义上说,它可以遍历表,但是当我尝试与数据表进行比较时-它失败了,这是因为推送到2D数组的元素顺序是随机的。我认为.each()函数正在异步工作-您是否对我可以解决这个问题有一个了解?
getCellValues(): Promise<string[][]> {
return new Promise<string[][]>(function (resolve, reject) {
let allValues = [];
// take all 'tr' child elements and iterate them using 'each()'
Brick_table_rows1.each(function(el){
//console.log("el text " + el.toString());
// create sub arr for filling one row in
let subArr = [];
// take a row and process each element
el.all(by.css('td')).each(function(subEl){
//console.log("subEl text: " + subEl.toString());
// get text of one row element
subEl.getText().then(function(text) {
// at the point we receive the text add it to sub array.
subArr.push(text);
console.log("subarr text: " + subArr.toString());
});
}).then(function () {
allValues.push(subArr);
console.log("arr text: " + allValues.toString());
});
}).then(function() {
resolve(allValues);
});
});
}