jasmine.Promise 与 webdriver.promise.Promise
Posted
技术标签:
【中文标题】jasmine.Promise 与 webdriver.promise.Promise【英文标题】:jasmine.Promise vs webdriver.promise.Promise 【发布时间】:2017-06-26 17:01:37 【问题描述】:在Protractor
页面对象测试中使用此方法:
public navigateTo = (): Promise<any> =>
return browser.get('https://material.angular.io/');
;
想要定义返回的类型,即Promise<any>
。
我应该导入jasmine
承诺吗?还是webdriver
承诺?
import * as webdriver from "selenium-webdriver";
import Promise = webdriver.promise.Promise;
或
import Promise = jasmine.Promise;
我对为什么需要指定 promise 的实现感到困惑。我可以为Promise
指定一个接口吗?
编辑:我真正想做的是:
npm install --save-dev @types/es6-promise
这给了我Promise<any>
类型。
相关问题:How to use Typescript with native ES6 Promises
【问题讨论】:
ES6 Promise 有什么问题,为什么不用它来代替? 我得到一个TSError: Unable to compile TypeScript practice.e2e-spec.ts : Cannot find name 'Promise'
所以也许我可以使用 ES6 承诺,但我没有它的类型?
【参考方案1】:
我不是 TypeScript 专家来回答你的第二个问题 - I'm confused about why I need to specify an implementation of promise.
但我可以回答它的第一部分
Should I import the jasmine promise? Or the webdriver promise?
不同的量角器命令返回不同类型的承诺 - 但大多数是webdriver.promise.Promise
。此信息的真实来源是Protractor API docs
一些例子
sendKeys() - webdriver.promise.Promise.<void>
executeScript() - promise.Promise<T>
getText() - webdriver.promise.Promise.<string>
restart() - webdriver.promise.Promise<ProtractorBrowser>
isPresent() - Promise<boolean>
browser.get()
返回一个webdriver.promise.Promise
【讨论】:
【参考方案2】:正在导入webdriver.promise.Promise
大多数对 selenium-webdriver 的 API 调用都返回 webdriver.promise.Promise
。这些承诺通过控制流按顺序执行。最近,他们已经从自己的 Promise 实现切换到原生 ES6 风格的 Promise。
您需要将webdriver.promise.Promise
导入您的量角器测试吗?应该不会吧。
正在导入jasmine.Promise
jasmine.Promise
不是来自 jasmine 类型,而是来自 jasminewd2
类型。这是使其余类型正常工作的助手。您应该将jasmine.Promise
导入到您的测试中吗?绝对没有。
量角器出现同步
我认为您不需要导入 webdriver.promise.Promise
的论点是 Protractor 有助于同步承诺。您不需要知道browser.get(URL)
的结果。这是一个承诺,这是为你完成的。所以你想要导入它的唯一原因是,如果你正在创建一个新的webdriver.promise.Promise
。
另外,我喜欢导入 webdriver 承诺,例如:
import promise as wdpromise from 'selenium-webdriver'
let wpromise = new wdpromise.Promise(resolveCallback, rejectCallback);
// a native promise
let npromise = new Promise(resolveCallback, rejectCallback);
我会避免导入为Promise
,因为这也是您创建原生 ES6 承诺的方式。见上文。
【讨论】:
明白了。非常感谢。我希望navigateTo
的返回类型为Promise<any>
。我发现了这个问题:***.com/questions/27573365/…。这大概就是我困惑的原因。我之所以回答是因为 Intellij 在我定义返回类型 Promise<any>
时提示我导入这些类型。
结束了npm install --save @types/es6-promise
。这就是我想要的,但是当我问这个问题时我不明白我想要什么:)。谢谢你的回答。
关于jasmine.Promise
,这是在github.com/DefinitelyTyped/DefinitelyTyped/commit/… 中更改的,而不是使用全局Promise
。
这是有道理的。我很高兴这被清理干净了。以上是关于jasmine.Promise 与 webdriver.promise.Promise的主要内容,如果未能解决你的问题,请参考以下文章