一部のファイルがロードされているアプリケーションがあり、ファイルのロード中にアプリケーションがしばらく応答を停止します。テストの自動化中に、ファイルの読み込みが自動化されるシナリオがありますが、qtpはアプリケーションが再び応答を開始するまで待機する必要があります。これをコーディングする方法は?「待つ」のような物件はありますか?
7 に答える
有効になっているボタンなどのアプリケーションオブジェクトの1つに同期ポイントを挿入します。同期ポイントでは、タイムアウト期間を指定できます。
「待つ」のような物件はありますか?
もしそうなら、それはアプリケーション固有なので、それに答えるには、アプリケーションのGUIデザインを技術的に調べる必要があります。
一般的に言って、人間のユーザーがアプリケーションが再び「応答している」とどのように理解するかを考えてみてください。通常、ボタンが表示されたり、コントロールがグレー表示されなくなったりするなど、視覚的なヒントがあります。同期ポイントを使用して、その状態で同期します。
すべてが失敗した場合(つまり、アプリケーションの処理が終了したときに表示、非表示、またはプロパティを変更するコントロールを識別できない場合)、人間が解釈するのと同じ視覚的な手がかりを探すビットマップチェックポイントに固執します。
多くの場合、同期ポイントまたは視覚的なヒントは、アプリケーションが入力を再び受け入れる準備ができる前に、少し早すぎます。次に、次のユーザー入力が予想される前にアプリケーションがキーボードバッファーをフラッシュすると(広く一般的な悪い設計の例...)、正しく同期するのに苦労します。キーストロークとマウスクリックは失われます。この場合、a)次の入力の前に遅延(関数呼び出しの待機)を挿入して問題を回避する、b)アプリケーションが入力キューをフラッシュしないようにする、c)視覚的な手がかりがアプリの後でのみ実行されるようにする必要があります本当に入力を受け入れる準備ができています。もちろん、b)とc)は開発者側の作業が必要であり、組織的に実装するのが難しい場合があります。
問題がさまざまな、またはすべてのコンテキストで発生する場合は、それをテスト管理に伝達し、開発者にテストロボット専用のカスタム「準備完了」信号を実装させるようにします。次に、QTPからそのシグナルを照会できます。これは、セマフォ、Windows文字列プロパティ(Set / GetPropEx API呼び出し)、ファイルの存在(baaad idea ..)、またはアプリからテストロボットに「準備完了」状態を伝達するその他の危険ではないが非同期の方法である可能性があります。
これはすべてクレイジーに聞こえますが、私は上記のすべてを実行し、通常は良い結果が得られました。
迅速でダーティな修正が必要な場合は、一般的なWait(seconds)を使用できます。たとえば、アプリケーションが1分以内に使用できるようになることがわかっている場合です。ただし、データの量によって異なる場合は、すべてのデータが処理された後に読み込まれるアプリケーションのコントロールの「存在」プロパティを使用してみてください。すなわち。
while not loaded
wait(1)
loaded = Window.Control.Exist
Wend
私の意見では、最も簡単で信頼性の高い解決策は、user32.dllからWinAPIのIsHungAppWindowを直接呼び出すことです。QTPを使用すると、外部関数を簡単に宣言できます。
アプリケーションの開始に最大2分かかるとします。以下の関数を使用して、アプリケーションが存在するかどうかを確認してください...
関数checkWindowExistance()
薄暗い私
i = 0
i = 0〜120の場合
Window.Dialog.Existの場合
{{
exit for
}
wait(1)'wait_for_1_second
次
i = 120の場合、
checkWindowExistance = false
そうしないと
checkWindowExistance = true
終了機能
Wait WaitProperty Syncこれら3つは、ページの同期を維持するメインのプロパティまたはメソッドです。
ほとんどのプログラマーが使用するのを待ちます。
ただし、「。Sync」を使用するには、完了ページをより適切に同期する必要がありますが、同期がタイムアウトするまでチェックし、正常に読み込まれると次のステップに移動します。
ただし、オブジェクトが時間内に検出されても、指定された時間まで待機します
Whileループを使用して、アプリケーションページの画面が表示されるのを待つことができます。ロードされると、スクリプトは次の画面に進む必要があります。