GUI オブジェクトは、「親 - 子」および「所有者 - 被所有」という 2 つの関連した階層に配列されます。 「親 - 子」関係の例には、ダイアログ・ボックスとそこに包含されているボタンがあります。 「所有者 - 被所有」関係の例には、トップレベル・ウィンドウとダイアログ・ボックスがあります。 オブジェクトの階層のいずれかのタイプを使用してください。
プロキシー実装では、基礎となるオブジェクト・モデル (例、Java™ および HWND) がこれら 2 つの関係を混同し、「所有者 - 被所有」関係を非対称の「親 - 子」関係として扱うのが一般的です。 この場合、希望する関係モデルが所有者/被所有のときには、プロキシーは親を持つことを拒否する必要があります。 階層を通過するために使用可能なメソッドは、getParent()、getChildren()、getOwner()、および getOwned() です。
プロパティーは、名前の付いた値です。 プロパティー自体にはタイプはありませんが、値にはタイプがあります。 プロキシーが同じプロパティーに対して異なるタイプを戻すことは避けてください。 プロパティー値が、値ではなくオブジェクトへの参照である場合があります。 このような値は、スクリプトに戻される場合、TestObject として戻されます。 プロパティーにアクセスするためのメソッドには、getProperty()、setProperty()、getProperties()、および getNonValueProperties() が含まれます。
デフォルトでは、新規のプロキシー・オブジェクトにはオブジェクト認識プロパティーおよび重みがない場合があります。 認識プロパティーおよび重みを割り当てるには、オブジェクト・ライブラリーを使用します。 オブジェクト認識プロパティーおよび重みにアクセスするためのメソッドは、getRecognitionProperties() および getRecognitionPropertyWeight() です。 親オブジェクト内に同じクラスの複数のオブジェクトが存在する場合、.classIndex プロパティー (0 で始まる正の数値) を子オブジェクトの認識プロパティーとして追加します。
一般的には、オブジェクトの階層全体がマップされます。 しかし、特定のオブジェクトはテスト・アプリケーションのビルド間で頻繁に変更される可能性があります。 例えば、Java では、パネルをクラスター・オブジェクトに一緒に追加するのが一般的です。 Functional Tester を使用すると、ユーザーはプロキシー・オブジェクトをマップしないように指定することができます。 マップ可能ではないオブジェクトがテスト・オブジェクト・マップに含まれていない場合でも、「親 - 子」階層を通過する際にオブジェクト階層はそれらをリストします。 マップ可能な階層を管理するためのメソッドには、shouldBeMapped()、getMappableParent()、および getMappableChildren() が含まれます。
場合によっては、基礎となるオブジェクト・モデルがプロパティーの概念をサポートすることもあります (例、Java、HTML、および .NET など)。 Functional Tester では、プロキシーが追加のプロパティーを実装することができます。 プロキシーがプロパティーを直接実装する場合、オブジェクトの他のプロパティーと混同しないように、プロパティー名には異なるパターンを含める必要があります。 認識用に使用する標準のプロパティー名は、ドット (.) で始まっている必要があります。特定の管理プロパティーは、認識用に使用できないフレームワークで使用されます。これらのプロパティー名は番号記号 (#) で始まります。
多くの場合、基礎となるオブジェクトには、検出して起動することのできる複数のメソッドがあります。 通常、これらはフレームワークおよびドメイン実装によって直接管理されますが、getMethod() はドメイン内の基本プロキシー上に実装されるのが普通です。
可能な限り、マウス・アクションが虫メガネから再生されるようにします。 メソッド名に「click」または「drag」が含まれる場合、マウス・イベントにアクションを実行させます。アクションを実装するためにマウス・イベントを使用しない場合は、「click」または「drag」といったメソッド名を使用しないでください。 キーボード・イベントがアクションを実装しない場合は、キーまたはキーボードを参照するメソッド名を使用しないでください。 メソッドが、実行されるアクションを反映し、再生中に信頼できるものであるようにします。 ヒューリスティックな方法は避けてください。
オブジェクトには他のオブジェクトを含めることができるため、ネストされたオブジェクト (複数の場合あり) として公開されていない内部構造が含まれる場合があります。 例えば、リストにはアイテムが含まれていても、そのアイテムがリスト・オブジェクトによってオブジェクトそのものとして公開されていない場合があります。 この種の振る舞いは、HWND ベースのオブジェクトでは一般的です。副項目を処理する最も一般的なメソッドは、getSubitem() と、click()、drag()、doubleClick() などのマウス・アクション・メソッドです。getSubitem() メソッドは NULL またはストリングを戻します。
副項目内のオブジェクトを完成したオブジェクトとして公開したくない場合は、以下の戦略のいずれかを使用します。
副項目プロキシーをマップ不可と宣言します。 この時点でオブジェクトはその親と対話し、親プロキシーは集約オブジェクトに対してアクションを記録し、副項目ベースの GUI アクションの再生をサポートします。
副項目の記録中に、プロキシーは processMouseEvent() 呼び出しをその親に渡します。親プロキシーは集約オブジェクトに対してアクションを記録し、副項目ベースの GUI アクションの再生をサポートします。
副項目の記録中に、プロキシーは processMouseEvent() 呼び出しを処理し、親オブジェクトでメソッド呼び出しを生成します。 親プロキシーは集約オブジェクトに対してアクションを記録しませんが、副項目ベースの GUI アクションの再生をサポートします。
アンカーとして使用した後、参照を登録抹消できるように、タグ付けされる新しい種類のオブジェクト参照を設けます。 これにより、別のオブジェクトの副項目を使用してオブジェクトをアンカーすることが可能になります。ネストされたオブジェクトは、親オブジェクトの子としてマップできます。
例外およびエラーを実装する際には、以下の規則に従ってください。
専用または内部の例外をプロキシーからスローしないでください。 プロキシーの API 文書は使用できない可能性があります。 標準的な例外 (RationalTestExceptions が望ましい) を使用します。
Java の com.rational.test.ft パッケージまたは .Net の Rational.Test.Ft 名前空間から例外を再利用します。 java プロキシーが com.rational.test.ftMethodNotFoundException 例外をスローし、スクリプトが VB で書かれている場合、VB スクリプトは Rational.Test.Ft.MethodNotFoundException 例外を取得します。 com.rational.test.ft の下で com で始まる名前を持たない例外をスローすると、WrappedException 例外として配列されます。
配列可能なすべての RationalTestExceptions は、単一のストリング・パラメーターを取るコンストラクターをサポートしている必要があります。
Java で実装されたプロキシー内に、クライアントに戻すことができると期待される新規の例外を追加する場合、同じ例外を .Net でも実装するようにしてください。
Java では、例外を宣言する必要がありますが、一部のテスターでは実用的ではない場合があります。 多くの例外はほとんどすべての GUI メソッドから発生するため、Java での例外ではなく実行時例外を使用してください。 エラーの使用は避けてください。 エラーが発生すると、再生またはレコーダー・セッション全体が停止します。
オブジェクトが見つからない場合、フレームワークは ObjectNotFoundException 例外をスローします。オブジェクトが見つかった場合、副項目が指定されていても見つからなければ、プロキシーは SubItemNotFoundException 例外をスローする必要があります。 SubItemNotFoundException がフレームワークによって検出され、自動的に再試行します。
入力座標において領域外にあるオブジェクトまたは副項目をクリックする場合、オブジェクトまたは副項目にその領域が含まれるように座標を変更してください。これが発生した場合にログに警告を生成するメカニズムを追加します。 オブジェクトの画面レイアウトを完全に記述できないために、プロキシーは座標ベースのクリックを使用しなければならない場合があります。 例えば、JTree では、PLUS_MINUS 形状は認識されませんが、それが適用される副項目との相対関係で見つけることができます。 プロキシーは、副項目の領域を拡張して PLUS_MINUS を組み込むことができます。副項目に負の座標を使用することができます。 通常の動作におけるすべての違反を文書化してください。指定された座標をクリックする副項目が、オブジェクトを超えてクリックしないようにしてください。
正しくないオブジェクトがクリックされた場合、com.rational.test.ft.CoordinateOnWrongObjectException 例外をスローします。 正しくないオブジェクトが正しいターゲットとオーバーラップしている可能性があります。座標を変更して、コンテナー内の子オブジェクトを回避することができます。 指定されたポイントを無視して、適切なオブジェクトでクリックするための別のポイントを探します。 マップ可能な子を持つオブジェクトの座標を記録しないようにし、正しくないオブジェクトに対するクリックを許可しないでください。
正しくない副項目がクリックされた場合、com.rational.test.ft.CoordinateOnWrongSubitemException 例外をスローします。 この例外は、副項目が指定されていないオブジェクトに関連付けられたクリックには適用されません。 このタイプのクリックは、オブジェクトおよびそのオブジェクト内の任意の副項目がクリックされた場合にのみ適用されます。 この場合、正しくない副項目は正しいターゲットをオーバーラップし、子である可能性があります。 この例外を回避するには、副項目をネストした副項目上の座標を記録しないようにします。 指定されたポイントを無視して、適切な副項目でクリックするための別のポイントを探します。