角度を使ったアプリの動作テストを書いています。 、私はasync/awaitシンタックスを初めて使う人です。この問題は私を止めさせた。誰かがメソッドでTypescriptエラーType of 'await' operand must either be a valid promise or must not contain a callable 'then' member.
を取得した理由とその解決方法を説明できますか?引数'await`を使用して、element()。getAttribute()がエラーを返しました: "await 'オペランドの型は有効な約束でなければなりません..."
画像の幅を確認して画像が表示されていることを確認しようとする次の簡単な投光器の仕様があります。
は、ここに私のE2E-spec.tsファイルからの抜粋です:
import { LoginPage, Layout } from '../page_objects';
describe('Login page',() => {
it('Should have the logo in the footer', async() => {
await LoginPage.navigateTo();
await expect(Layout.isFooterLogoPresent).toBe(true);
})
});
そして、ここで問題になっているロゴ画像への可視性を持っている私のレイアウトページオブジェクトからの抜粋です。エラーの原因となるawait element(...).getAttribute(...)
チェーンの行。
static get isFooterLogoPresent() {
return element(by.css('.content-footer img')).getAttribute('naturalWidth') // naturalWidth attr is 0 if image is missing
.then(imgWidth => imgWidth > 0);
}
をところで、私はTypscript 2.3.2および5.2.0分度器を使用しています:(作品)
import { browser, element, by } from 'protractor/globals';
export class Layout {
static get isFooterLogoPresent() {
return (async() => { // <-- this wrapping is necessary to use async/await in getter method
return await element(by.css('.content-footer img')).getAttribute('naturalWidth') > 0; // <-- PROBLEM HERE
})
}
}
次の約束ベースの構文は、私が交換するためにしようとしているものです。 私はあなたが持っているすべての知恵を感謝します。ありがとう!解決された値に、いない比較式に> 0
を適用する
import { browser, element, by } from 'protractor/globals';
export class Layout {
static get isFooterLogoPresent() {
return (async() => {
return (await $('.content-footer img').getAttribute('naturalWidth')) > 0;
})
}
}
これをBUT -
香辛料は、分度器タイプ定義ファイルに問題があります。あなたは何のために使っていますか? –
前回のコントロールフローを使用して長い時間がかかっていることを確認してください:https://github.com/angular/protractor/tree/master/exampleTypescript/asyncAwait –
Ah @MadaraUchiha、私は分度器のための特定のタイコープルの宿泊施設はありません。私のpackage.json devDependencies、または何か他に '@ types/protractor'が必要ですか? (このようなパッケージは存在しますが、1年間更新されておらず、一般的な解決策であることを示すダウンロード速度はありません)。はい、私は分度器の設定をオフにしています。 –