電子アプリケーションをテストするためにSpectronを使用しようとしています。ドキュメントでは、n番目の子を見つけようとするときに、n番目の子セレクタを使用するか、セレクタと一致するすべての子を$$
で取得し、インデックス演算子、つまり$$ ("foo")[0]
を最初のfooとして使用することができます。その知識とDOCS
、私は、出力に次のコードを期待:BAR
私はこの仕事を得ることができない、私は次のことを試してください。
const foo = ".foo";
const fooElements = app.client.$$ (foo);
console.log ("FOOELEMENTS", await TP (app.client.getHTML (foo)));
console.log ("BAR", fooElements[0].getText (".bar"));
そして、次のような出力が得られます。
console.log components\pages\analysis\__test__\Analysis.spectron.ts:44
FOOELEMENTS [ '<div class="foo"><div class="bar">BAR</div><div class="baz">BAZ</div></div>',
'<div class="foo"><div class="bar">BAR2</div><div class="baz">BAZ2</div></div>',
'<div class="foo"><div class="bar">BAR3</div><div class="baz">BAZ3</div></div>'
'<div class="foo"><div class="bar">BAR4</div><div class="baz">BAZ4</div></div>' ]
console.log components\pages\analysis\__test__\Analysis.spectron.ts:50
EXCEPTION TypeError: Cannot read property 'getText' of undefined
at components\pages\analysis\__test__\Analysis.spectron.ts:45:44
at Generator.next (<anonymous>)
at fulfilled (components\pages\analysis\__test__\Analysis.spectron.ts:4:58)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:228:7)
出力HTMLには実際には.foo
個のdivがありますが、最初にアクセスしようとすると、fooElements[0]
はundefined
追記:
export async function toPromise<T> (client: Webdriver.Client<T>)
{
return client as any as Promise<T>;
}
// Promise
interface Client<T> {
finally(callback: (...args: any[]) => void): Client<T>;
then<P>(
onFulfilled?: (value: T) => P | Client<P>,
onRejected?: (error: any) => P | Client<P>
): Client<P>;
catch<P>(
onRejected?: (error: any) => P | Client<P>
): Client<P>;
inspect(): {
state: "fulfilled" | "rejected" | "pending";
value?: T;
reason?: any;
};
}
どれ:TP
は活字体は、それらが実装されている方法で混乱しているので、私は、webdriverを約束を待つことができますtoPromise
と呼ばれる私が書いた関数のエイリアスです。私が間違ってやっているアイデア?または代替案を提案しますか?可能であれば、n番目の子セレクタを避けることをお勧めします。
EDIT:クラス
私はIDが正しいとは思っていません。最終的に修正するつもりですが、興味深いのは強制的なルールではなく、いくつかのDOM関数では動作が未定義になるということです。また、セレクタが問題ではないので、あなたの答えは意味をなさないが、それは私の問題を解決しません。問題は、getTextは未定義です。 「例外」を参照してくださいTypeError:未定義の 'getText'プロパティを読み取ることができません – austinrulezd00d
@ austinrulezd00dテストケースをデバッグモードで '.debug()'を使ってロックし、初期化後に 'fooElements'が返すものを見てみましょう。 const fooElements = app.client。$$(foo); '。私が上の答えで実証したように、それは通常の設定で動作しますが、不運にも私は彼らが来るときにTypeScriptに関して手を結んでいます。 – iamdanchiv