【问题标题】:Function that returns Protractor "element.all" has output type Promise<string> instead of Promise<string[]> in Typescript返回量角器“element.all”的函数具有输出类型 Promise<string> 而不是 Typescript 中的 Promise<string[]>
【发布时间】:2019-09-12 05:42:53
【问题描述】:

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

【问题讨论】:

    标签: typescript protractor


    【解决方案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 数组。

    【讨论】:

    • 谢谢,成功了!快速提问:“promise.Promise”和“Promise”有什么区别?如果我使用后者,编译失败并显示:“Type 'Promise' is missing the following properties from type 'Promise': [Symbol.toStringTag], finallyts(2739)”
    猜你喜欢
    • 2021-02-06
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 2020-08-20
    相关资源
    最近更新 更多