1

インターンとセレンの機能テストにリードフット モジュールを使用しようとしています。

このテストでは、ある場所でボタンをクリックしてから、ページの別の場所にある要素の表示プロパティを確認しようとしています。

findById 呼び出しの検索を拡張する方法が見つからなかったので、動作しているように見えるセッション プロパティを使用してみましたが、すべてが約束を返します。

私が見つけた唯一の方法は、関数を連鎖させることです。セッション (およびその関数が返す要素) の違いは何ですか?

return this.remote
    .findById('buttonContainer')
    .findByClassName('buttonClass')
    .click()
    .session 
    .findById('stagePanel')
    .then(function(element) {
        element.findByClassName('itemList')
        .then(function(element) {
            element.getComputedStyle('display')
            .then(function (display) {
                // check display property
            });
        });

    });

私は多くのことを間違っていると確信しているので、あらゆるアドバイスをいただければ幸いです。

4

1 に答える 1

4

this.remoteオブジェクトはCommandオブジェクトであり、SessionオブジェクトやElementオブジェクトではありません。Session が必要な場合は取得できますがthis.remote.session、通常は不要であり、Session オブジェクトはチェーン可能ではありません。

2番目が機能しない理由は、以前の呼び出しで追加したフィルタリングを行っfindByIdていないためですendfindBy検索操作の後に呼び出さない場合end、後続の検索操作では、前の検索の要素が検索対象のルート要素として使用されます。

つまり、 を実行するthis.remote.findById('a').findById('b')と、要素 'a' の内部で要素 'b' が検索されます。ドキュメント全体ではなく、ドキュメント全体this.remote.findById('a').end().findById('b')で 'a' と 'b' の両方が検索されます。

また、コールバック内から非同期操作を実行するときはいつでもreturn、操作の結果が必要です。そうしないと、テストは、さらに操作が完了するまで待機する必要があることを認識できません。リターン チェーンは、コールバック ピラミッドも防ぎます。

return this.remote
    .findById('buttonContainer')
      .findByClassName('buttonClass')
        .click()
        .end(2)
    .findById('stagePanel')
    .then(function(stagePanel) {
        return stagePanel.findByClassName('itemList');
    }).then(function(itemList) {
        return itemList.getComputedStyle('display');
    }).then(function (display) {
        // check display property
    });
于 2015-02-24T16:35:52.953 に答える