在量角器中使用本机承诺

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在量角器中使用本机承诺相关的知识,希望对你有一定的参考价值。

有没有办法使用量角器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

答案

我刚刚遇到这个问题,并且无法创建一个需要量角器承诺并返回本机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但无法使其工作的函数。但是这个功能应该适合您的需求。

以上是关于在量角器中使用本机承诺的主要内容,如果未能解决你的问题,请参考以下文章

量角器异步/等待 UnhandledPromiseRejectionWarning:未处理的承诺拒绝

量角器 - 如何将一组承诺的结果放入另一个数组

量角器预期条件包装器返回布尔承诺

量角器中的“defaultTimeoutInterval”何时重置?

除了尝试捕获或承诺拒绝之外,有没有办法处理量角器的预期条件?

量角器 - 处理“then”承诺使它们更具可读性