5

ajax4jsf を使用して ajax 機能を実装する Web アプリを QTP を使用してテストしようとしています。QTP には、ajax がいつ終了したかを認識する機能がありません。QTP 9.5 および QTP 10 で提供される Web 拡張ツールキットが問題の解決策であると読みました。ただし、これがどのように役立つのか理解できません。httpRequest オブジェクトの準備完了状態を把握し、状態が「完了」になったらテストを続行する必要があります。しかし、Web 拡張ツールキットから httpRequest に到達する方法がわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

2

AJAX 呼び出しを使用して Web ベースのアプリケーションのテストを自動化した私の経験に基づいて、次のことを検討することをお勧めします。

  1. QTP のオブジェクト認識メカニズムは、Windows ハンドルを持つGUIオブジェクトを探しています。そのため、可能な限り GUI オブジェクトのみを使用してください。手動でテストしても XmlHttpRequest オブジェクトには到達しませんが、機能テストを妨げることはありません。GUI オブジェクトのプロパティの変更に基づいて、さまざまなイベントを同期できます。例えば。「読み込んでいます...」という画像やテキストが表示されたり消えたりしました。ドロップダウン リストに新しい項目が追加されなくなりました。ボタンが有効/無効になります。

  2. これが社内アプリケーションである場合は、QTP のより使いやすいサポートを開発できます。ここでは、拡張ツールキットのガイドを使用できます。さらに、テスト ビルド オプションとして、GUI オブジェクト (非表示の画像またはテキスト要素) を含め、それを使用して AJAX トランザクションの状態を示すことができます。

  3. 最後に、この方法で XmlHttpRequest オブジェクトを使用する方法に関する情報はありませんが、DOM に直接アクセスして非 GUI オブジェクトに到達することはできます。

ありがとう、アルバート・ガレエフ

于 2009-07-30T13:42:01.053 に答える
2

回答ありがとうございます。

QTP Extensibilty ツールキットを使用して問題を解決することができました。A4j は ajax の前後に起動されるリスナーのキューを使用します (リスナーのタイプによって異なります)。このソリューションでは、各 ajax コンポーネント (webButton など) に Jscript 関数を実装しました
。 1. globalVariable を 0 に初期化します
。 2. 新しい関数をタイプ onafterajax のリスナーとして登録します。

_elem.ownerDocument.parentWindow.A4J.AJAX.AddListener({
        onafterajax: function(req, event, data) {
            globalVariable = 1;
        }
    });
  1. ボタンをクリックします
  2. ある種のビジー待機ループに入ります。

    while (globalVariable != 1) {   
        _util.Wait(250);
    }
    

登録した関数は ajax が終了したときに呼び出され、globalVariable を変更して while ループが終了するようにします。私はこれが醜いことを知っていますが、うまく機能します。

唯一の問題は、QTP 10 が _util.wait を実装しているのに対し、QTP 9.5 は実装していないことです。待機しないと、ブラウザは無限ループに陥り、登録された関数は呼び出されません。Jscript での非ビジー待機待機の実装に関する解決策は、非常に高く評価されます。

于 2009-08-05T06:38:50.423 に答える