在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>
类型。
答案 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