在量角器中使用本机承诺

问题描述 投票:4回答:1

有没有办法使用量角器filter接受一个返回量角器自己的Promise类型的函数,我自己的函数返回本机Promise?

const myFilter = async(e: ElementFinder): Promise<boolean> => {
...
}
myElements.filter(myFilter)

这会引发TypeScript编译错误

TS2345:类型'(e:ElementFinder)=>> Promise'的参数不能赋值给'参数'(元素:> ElementFinder,index?:number)=> boolean |诺言'。类型'Promise'不能赋值为'boolean |诺言'。 “承诺”类型不能分配给“promise.Promise”类型。 “承诺”类型中缺少“取消”属性。

顺便说一句,我不能自己创造量角器的承诺,因为堕落(https://github.com/SeleniumHQ/selenium/issues/2969

typescript protractor
1个回答
0
投票

我刚刚遇到这个问题,并且无法创建一个需要量角器承诺并返回本机Promise的函数。所以我认为答案是否定的。

我最终得到的解决方案是创建一个同步函数,如下所示:

export function filterBy(elements: ElementArrayFinder, locator: By | Locator | ProtractorLocator): ElementArrayFinder {
  return elements.filter((element: ElementFinder) => element.element(locator).isPresent());
}

用法如下:

let elements = element.all(by.css('CSS_RULE'));
let filtered = filterBy(elements, by.css('CHILD_CSS_RULE'));

我尝试了一天多的时间来获得一个返回本机Promise但无法使其工作的函数。但是这个功能应该适合您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.