2

私は現在、ES6 Promisesを返すプロジェクタテストでいくつかの外部コードを呼び出しています。Protractor/WebDriverJSネイティブES6プロミスをTypescriptで追加します

私はControlFlowを使用してこれらの約束をつなぎたいと思っていましたが、Typescriptをコンパイルするときにタイプエラーが発生しました。試験で

import {browser} from 'protractor'; 
... 
it('should have a title',() => { 
    let flow = browser.controlFlow(); 
    flow.execute(testServer.fixture('user_test_roles')); 
}); 

実行:

[13:04:39] E/launcher - Error: ⨯ Unable to compile TypeScript 
src/app/app.e2e.ts (9,18): Argument of type 'Promise<{}>' is not assignable to parameter of type '() => {} | Promise<{}>'. 
    Type 'Promise<{}>' provides no match for the signature '(): {} | Promise<{}>' (2345) 

私はflow.wait()をしようとした場合、私は別のタイプのエラーを取得:

[13:08:27] E/launcher - Error: ⨯ Unable to compile TypeScript 
src/app/app.e2e.ts (9,15): Argument of type 'Promise<{}>' is not assignable to parameter of type 'Function | Promise<{}>'. 
    Type 'Promise<{}>' is not assignable to type 'webdriver.promise.Promise<{}>'. 
    Property 'cancel' is missing in type 'Promise<{}>'. (2345) 

は私がラップすることができますいくつかの方法がありますそれらを互換にする約束?

答えて

2

ManagedPromiseの制御フローは、selenium-webdriverから提供されています。 testServer.fixtureがネイティブES6の約束を返す場合、これは機能しません。ネイティブのES6の約束は同じではないwebdriver.promise.Promise

+0

「ManagedPromise」とネイティブES6の約束事の違いは何ですか? ES6対jQuery対Angular '$ q'約束のような純粋なインターフェースですか?あるいは、より広い統合またはパラダイムの違いが続いていますか?彼らは異なった振る舞いをしていますか? –

+1

これは上記の文には含まれていないかもしれませんが、 'ManagedPromise'は' webdriver.promise.Promise'としてエクスポートされます。webdriver promiseとネイティブES6の約束は、同様のインターフェースを持っています。しかし、 'ManagedPromise'には' cancel'のような追加のメソッドがあります。これは型エラーを起こしている理由です。制御フローは、管理された約束を処理し、約束を順番に実行します。これが彼ら自身の実装を持っている理由です。現在、selenium-webdriver 3.0.0では、彼らは本来の約束を使っていますが、まだ 'ManagedPromise'を持っています。分度器のselenium-webdriverの現在のバージョンは2.53.1です。 – cnishina

関連する問題