将WebDriver承诺转换为本机承诺?

时间:2017-02-21 15:06:46

标签: selenium typescript webdriver protractor

我有这个方法:

isOnPage(): Promise<boolean> {
  return this.subtitle.isPresent();
}

typescript编译器给出了这个错误:

Type 'webdriver.promise.Promise<boolean>' is not assignable to type 'Promise<boolean>'

有没有办法将WebDriver承诺转换为本机承诺?

这会有用吗?

isOnPage(): Promise<boolean> {
  return new Promise(() => {
    return this.subtitle.isPresent();
  });
}

4 个答案:

答案 0 :(得分:2)

您可以跳过声明返回类型。这仍然会向您显示返回值的正确建议

isOnPage() {
   return this.subtitle.isPresent();
}

答案 1 :(得分:0)

import { promise } from 'selenium-webdriver';

...

isOnPage(): promise.Promise<boolean> {
    return this.subtitle.isPresent();
}

答案 2 :(得分:0)

@types/selenium-webdriver/index.d.ts导出名称空间promise,该名称空间具有实现Promise(不是PromiseLike)的类Promise

PromiseLike似乎是typescript/lib/lib.es6.d.ts中的本机实现,因此您可以将其用作函数的返回类型。区别似乎在于PromiseLike仅具有then,而Promise具有thencatch

isOnPage(): PromiseLike<boolean> {
  return this.subtitle.isPresent();
}

答案 3 :(得分:0)

我也更喜欢原生的Promise,并通过以下方式将其转换为它们:

http://db:6379

这允许编写如下代码:

isOnPage(): Promise<boolean> {
  return Promise.resolve().then(() => {
    return this.subtitle.isPresent();
  });
}