プロキシー開発のベスト・プラクティス

プロキシーを開発する際にベスト・プラクティスに従うことによって、作業をより効率的かつ効果的に行うことができます。 開発における取り組みを強化するには、以下の方式を考慮してください。
GUI オブジェクトに適切な階層を使用する

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 またはストリングを戻します。

副項目内のオブジェクトを完成したオブジェクトとして公開したくない場合は、以下の戦略のいずれかを使用します。

例外およびエラー

例外およびエラーを実装する際には、以下の規則に従ってください。


フィードバック