2017-11-17 73 views
1

CSSセレクタで見つかった特定のブラウザオブジェクトが存在するかどうかによってワークフローの動作を変更する必要があるスクリプトを作成しようとしています。TestCafe - テストに失敗することなくWeb要素が存在するかどうかを確認する方法?

私はdocument.getElementByIDメソッドを技術的にはCSSセレクタではないので、私たちの企業全体がCSSセレクタで標準化されているので、CSSセレクタ以外のDOMを歩いているものはそれを過去にしませんとにかく私たちのコードレビュープロセス。

thingSelectorがある
var thing = await things.thingSelector(thingName); 
if (await t.expect(thing.exists).notOk()) { 
    await t.click(things.OpenThing(thingName)); 
} else { 
    return false; 
} 
return true; 

OpenThingがある
const thingSelector = name => 
    Selector('p.thing-header-title span') 
    .withText(name) 
    .parent('div.thing'); 

:オブジェクトが存在しないと、私はあることにそれをチェックしていた場合、私は実行を継続できるようにする必要があり

const OpenThing = name => 
    thingSelector(name) 
     .find('a.thing-footer-item') 
     .withText('Open'); 

オブジェクトが存在しているかどうか、オブジェクトが存在しないこと、オブジェクトが存在しないこと、オブジェクトが存在しないこと、存在しないことを確認している場合。

いずれの場合でも、まだワークフローを進める必要があります。私は、論理コインの両面試した

:上記のいずれかが、それは他に失敗する1つのシナリオで失敗していない場合

if (!await t.expect(thing.exists).ok()) 

そして

if (await t.expect(thing.exists).notOk()) 

をし、最初のシナリオが失敗しなかったシナリオでは、もう1つは失敗します。私には論理を与えるものが必要ですが、スクリプトの実行に失敗することはなく、オブジェクトが存在するかどうかによってTrueまたはFalseのいずれかを返すことができます。

私はこの問題の解決を手伝ってくれてありがとう、また、私のJavascriptスキルで学び成長することをありがとう!

+0

あなたは、「スクリプトの実行に失敗」とはどういう意味ですか?エラーが発生した場合は、すべての詳細が質問に表示されます。また、 'await'が拒否された約束の後に戻ってこない場合、' t.expect(thing.exists).notOk()) 'が拒否される可能性があることを知るのに役立ちます。 – traktor53

答えて

3

あなたは次のようにif状態で非同期existsプロパティを確認することができます。

if(await things.thingSelector(thingName).exists) { 
    // do something 
} 
+2

ありがとうございました!私は今それがどのように働くべきかを少し良く理解しています。これはうまくいった! :-D私は学習が大好き! –

関連する問題