使用量角器Typescript框架中的Typescript遍历HTML表以获取Cells



我正在量角器黄瓜框架中使用typescript编写e2e测试。在我的测试中,我想将UI中的HTML表与cucumber数据表进行比较。起初,我所做的只是尝试获取每个单元格的文本。但我面临着反复出现的问题。这是我的代码,我是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表非常相似

为了能够以正确的顺序存储元素,我们可以依赖索引。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);
});
});
}

因此,下面的代码部分有效-从某种意义上说,它可以遍历表,但当我尝试与数据表进行比较时,它失败了,这是因为推送到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);
});
});
}    

最新更新