jasmine.Promise vs webdriver.promise.Promise

时间:2017-02-08 21:27:48

标签: angularjs typescript protractor

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

2 个答案:

答案 0 :(得分:2)

导入webdriver.promise.Promise

对selenium-webdriver的大多数API调用返回webdriver.promise.Promise。这些承诺通过控制流程按顺序执行。最近他们已经从他们自己的承诺实施转向原生的ES6风格承诺。

您是否需要将webdriver.promise.Promise导入您的量角器测试?可能不是。

导入jasmine.Promise

jasmine.Promise不是来自茉莉花类型,而是来自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承诺的方式。见上文。

答案 1 :(得分: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?

不同的Protractor命令会返回不同类型的承诺 - 但主要是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