web-dev-qa-db-ja.com

TestCafe-テストに失敗せずにWeb要素が存在するかどうかを確認する方法

CSSセレクターで見つかった特定のブラウザーオブジェクトが存在するかどうかに応じて、ワークフローの動作を調整する必要があるスクリプトを記述しようとしています。

Document.getElementByIDメソッドを使用したくないとにかく。

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

ThingSelectorは次のとおりです。

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

OpenThingは次のとおりです。

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

オブジェクトが存在せずに存在することを確認している場合、またはオブジェクトが存在し、存在しないことを確認している場合、およびオブジェクトが存在しない場合も実行を継続できる必要があります。そして、それは存在せず、オブジェクトはそこになく、私はそれが存在しないことを確認しています。

いずれの場合も、ワークフローを続行する必要があります。

私は論理コインの両側を試しました:

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

そして

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

上記のいずれかが1つのシナリオで失敗しない場合、もう1つのシナリオで失敗し、もう1つは最初のシナリオで失敗しなかったシナリオで失敗します。ロジックを提供するものが必要ですが、スクリプトの実行に失敗することはなく、オブジェクトが存在するかどうかに応じてTrueまたはFalseを返すことができます。

この問題を解決するために、また私のJavascriptスキルを学び、成長させるために私を助けてくれてありがとう!

13
Seth Eden

次の方法で、exists条件の非同期ifプロパティを確認できます。

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

次のアサーションを使用して、存在要素と非存在要素をテストできます。

test('Test existence and non-existence elements', async t => {
    await t
        .expect(Selector('#existing-element').exists)
        .expect(Selector('#non-existing-element').exists).notOk()
});
3