Silk4J がテストを同期する方法

ほとんどの予期しないテストの失敗は、同期問題に起因します。テストの再生時の同期が弱いと、予期しない結果が生成されるため、実際のアプリケーションの問題を見つけることが困難になります。同期エラーはタイミングの問題で、テストの環境に強く依存しており、このようなエラーを再現し解決することは困難です。たとえば、特定のテスト環境で発生する同期エラーが、開発環境では再現できないことがあります。同期が弱いと、自動化プロジェクトにおいて、自動化テスト セットの肥大化に伴い管理不能に陥る、最も一般的な理由のひとつになります。

Silk4J では、自動的なテスト同期をすべてのサポートするテクノロジに対して提供しているため、ロバストで管理可能なテスト セットを構築できます。テストの再生中に、Silk4J は、AUT が次の操作を実行する準備ができるまで、常にテストが待機するようにします。テストの検証ステップでは、Silk4J は、テストのそれより前のテストが検証を実行する前に完了しているようにします。

AUT の特定の動作にテストを適用する場合は、次の同期タイムアウトの値を変更できます。
同期タイムアウト (OPT_SYNC_TIMEOUT)
再生中に AUT が準備完了状態になるまで Silk4J が待機する最大時間をミリ秒で指定します。デフォルト値は、300000 ミリ秒です。
オブジェクト解決タイムアウト (OBJ_WAIT_RESOLVE_OBJDEF)
find メソッドがオブジェクトを検索する最大時間をミリ秒で指定します。デフォルト値は、5000 ミリ秒です。
注: 低速な接続でアクセスした仮想マシンなどの低速なシステムや高負荷な環境でテストを正しく実行できるようにするために、Silk4J は内部タイムアウト値を増やすことがあります(AUT の開始時やダイアログやウィンドウの表示時など)。AUT、ダイアログ、ウィンドウが完全に表示されると、Silk4J は再びタイムアウト値を OPT_WAIT_RESOLVE_OBJDEF で指定された値に戻します。
オブジェクト解決再試行間隔 (OPT_WAIT_RESOLVE_OBJDEF_RETRY)
Silk4J がオブジェクトを直ちに見つけることができなかった場合、Silk4J はオブジェクト解決タイムアウトが経過するまでオブジェクトの検索を再試行します。オブジェクト解決再試行間隔は、Silk4J がオブジェクトの検索を再試行するまで待機する時間をミリ秒で指定します。デフォルト値は、1000 ミリ秒です。
オブジェクト有効化タイムアウト (OPT_OBJECT_ENABLED_TIMEOUT)
再生中にオブジェクトが有効になるまで Silk4J が待機する最大時間をミリ秒で指定します。デフォルト値は、1000 ミリ秒です。
注: タイムアウトは重なりません。

Silk4J が提供する自動的な同期のうち、特に Web アプリケーションに関する詳細な情報については、「xBrowser のページ同期」を参照してください。Silk4J が提供する同期のうち、特に AJAX アプリケーションに関する詳細な情報については、「How to Synchronize Test Automation Scripts for Ajax Applications」を参照してください。

自動同期の他にも、Silk4J では、 スクリプトに待機関数を手動で追加することも可能です。手動同期を行うために、Silk4J で提供されてる待機関数は次の通りです。
waitForObject
指定したロケータに一致するオブジェクトを待機します。XPath ロケーターやオブジェクト マップ識別子に対して動作します。
waitForProperty
指定したプロパティが指定した値になるか、タイムアウト値に到達するまで待機します。
waitForPropertyNotEquals
指定したプロパティの値が指定した値でなくなるか、タイムアウト値に到達するまで待機します。
waitForDisappearance
オブジェクトが存在しなくなるか、タイムアウト値に到達するまで待機します。
waitForChildDisappearance
locator パラメータで指定された子オブジェクトが存在しなくなるか、タイムアウト値に到達するまで待機します。
waitForScreenshotStable
オブジェクトの表示が安定し、その位置が変化しなくなるまで待機します。

テストが ObjectNotFoundException で不規則に失敗する場合、オブジェクト解決タイムアウト を増やします (30 秒にするなど)。進行状況ダイアログが表示され、長時間計算が行われた後に表示されるオブジェクトをクリックする場合など、特定の操作に特別に時間のかかる場合は、waitForObject メソッドをテスト スクリプトに手動で追加してオブジェクトが見つかるまで待機するようにしたり、waitForDissapearance メソッドをテスト スクリプトに追加して進行状況ダイアログが表示されなくなるまで待機するようにします。

自動的な同期の例

Silk4J がキャプション Ok を持つボタンをクリック する、次のサンプル コードを考えます。

PushButton button = _desktop.find("//PushButton[@caption='ok'");
button.Click();
このサンプル コードの操作を再生するために、Silk4J は次の同期操作を実行します。
  1. Silk4J はボタンを検索します。そして、オブジェクト解決タイムアウト が経過した場合、Silk4J は再生を停止して例外をスローします。
  2. Silk4J はテスト対象アプリケーション (AUT) が準備完了状態になるまで待機します。AUT が準備完了状態になる前に、同期タイムアウト が経過した場合、Silk4J は再生を停止して例外をスローします。
  3. Silk4J はボタンが有効になるまで待機します。オブジェクト有効化タイムアウト がボタンが有効になる前に経過した場合、Silk4J は再生を停止して例外をスローします。
  4. Silk4J はボタンをクリックします。
  5. Silk4J はテスト対象アプリケーション (AUT) が再び準備完了状態になるまで待機します。