返回量角器“ element.all”的函数在打字稿中

时间:2019-09-11 19:33:22

标签: typescript protractor

请查看下面的代码。 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"); 
}

1 个答案:

答案 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数组。