请查看下面的代码。 getAllGroupIds()函数返回“组”元素的ID数组。基本上,我会获得测试操作之前的所有组ID,并获得测试操作之后的所有组ID,然后我要进行比较。
但是下面的代码由于“ groupIdsAfter.filter”而无法编译:
类型“字符串”上不存在属性“过滤器”。ts(2339)
基本上,TS认为getAllGroupIds函数返回Promise(string)。它没有注意到我有“ element.all”。与“ element.all”一起使用时,“ getAttribute”返回的是字符串数组,而不是字符串。
我试图将函数的输出设置为Promise(string []),但随后出现另一个编译错误:
类型“ Promise”缺少类型“ Promise”中的以下属性:[Symbol.toStringTag],finallyts(2739)
testCreateEmptyActivity2 = () =>
{
this.page.navigateTo().then(() =>
{
this.getAllGroupIds().then((groupIdsBefore) =>
{
console.log(groupIdsBefore);
// do something: test action
this.getAllGroupIds().then((groupIdsAfter) =>
{
console.log(groupIdsAfter);
let diff = groupIdsAfter.filter(e => !groupIdsBefore.includes(e));
console.log(diff);
});
});
browser.sleep(2000);
});
}
private getAllGroupIds = () =>
{
return element.all(by.css("rect.group")).getAttribute("id");
}
答案 0 :(得分:1)
这是已知的issue。
您需要遍历数组,可以这样进行:
private getIds(): promise.Promise<string[]> { // promise is imported from protractor
return element.all(by.css("rect.group")).map(elem => {
if (elem) {
return elem.getAttribute('id');
}
});
}
输出将是一个ID数组。