(57)【要約】【課題】自動ユーザインターフェーステスト環境内でユーザインターフェースエレメントが可視的になるようにする様々な装置および方法を提供する。【解決手段】ユーザインターフェースエレメントの親エレメントの所在を見出し、次いでトップダウンスクロール、ボトムアップスクロール、展開、またはこれら３つのすべての組合せを使用してユーザインターフェースオブジェクトを可視化する。この例示の実施形態はさらに、可視化されたユーザインターフェースエレメントは、ユーザインターフェースエレメントが存在するウィンドウが、ユーザ入力のための準備ができており、別のオブジェクトによってカバーされていないようにすることによって、選択することができることを確認する。【選択図】図２
2006114049.tif 000002
【特許請求の範囲】
【請求項１】
自動ユーザインターフェーステスト環境内において、可視化すべきユーザインターフェースエレメントを選択すること、
前記ユーザインターフェースエレメントの少なくとも１つの親エレメントを決定すること、
前記ユーザインターフェースエレメントの前記少なくとも１つの親エレメントについての子可視化アクションを実施すること、および、
前記ユーザインターフェースアイテムが選択可能になるようにすること
を含み、子可視化アクションを実施することは、
前記親エレメントがスクロール可能である場合には、前記親エレメントをスクロールして前記ユーザインターフェースエレメントを可視化すること、
前記親エレメントが展開可能である場合には、前記親エレメントを展開して前記ユーザインターフェースエレメントを可視化すること
を含むことを特徴とするコンピュータに実装される方法。
【請求項２】
前記スクロールすることは、トップダウンスクロールまたはボトムアップスクロールのうちの一方を使用することを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記親エレメントは、少なくとも１つの現在可視的な子エレメントをさらに含み、前記子エレメントは、子ロケーション変数をさらに含み、前記ユーザインターフェースエレメントは、ユーザインターフェースエレメント変数を含み、前記スクロールは、
現在可視的な子エレメントを見出すこと、
前記現在可視的な子ロケーション変数を前記ユーザインターフェースエレメント変数と比較して移動方向を決定すること、および、
前記ユーザインターフェースエレメントが、前記親エレメント内で可視的になるまで前記移動方向にスクロールすること
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記移動方向にスクロールすることは、前記ユーザインターフェースエレメントが可視的になるのに先立って端部ロケーションに到達し、前記方法は、前記ユーザインターフェースエレメントが可視的になるまで前記移動方向と反対方向にスクロールすることをさらに含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記移動方向にスクロールすることは、現在のロケーションを変更することができず、前記方法は、前記ユーザインターフェースエレメントが可視的になるまで前記移動方向と反対方向にスクロールすることをさらに含むことを特徴とする請求項３に記載の方法。
【請求項６】
現在可視的な子エレメントを見出すことは、バイナリ探索、フィボナッチ探索、ジャンプ探索、または線形探索を含む少なくとも１つの探索タイプを使用して第１の可視的な子エレメントを探索することを含むことを特徴とする請求項３に記載の方法。
【請求項７】
Ｎ個の子エレメントが存在し、前記方法は、最初はｎ＝Ｎ／２またはｎ＝Ｎ／３で、後続の再帰レベルｎ＝ｎ／２ごとに、ｎ番目の子エレメントごとの可視性を再帰的に検査するバイナリ探索を使用することをさらに含むことを特徴とする請求項１に記載の方法。
【請求項８】
可視性について検査されている子エレメントごとにマーク付けされ、前記マーク付けされた子エレメントは、後続の再帰的探索において検査されないことを特徴とする請求項７に記載の方法。
【請求項９】
ハッシュテーブルをさらに含み、前記マーク付けされた子エレメントは、前記ハッシュテーブルに記憶されることを特徴とする請求項８に記載の方法。
【請求項１０】
前記ユーザインターフェースエレメントは、リストボックス、リストボックスのエレメント、コンボボックス、コンボボックスのエレメント、メニュー、メニューのエレメント、マルチカラムリストボックス、マルチコンボリストボックスのエレメント、マルチカラムコンボボックス、マルチカラムリストボックスのエレメント、複数選択拡張リストボックス、複数選択拡張リストボックスのエレメント、テキストボックス、テキストボックスのエレメント、スクロールペイン、スクロールペインのエレメント、タブ化ペイン、タブ化ペインのエレメント、カレンダ、カレンダのエレメント、ツリー、ツリーのエレメント、ウィンドウ、またはウィンドウのエレメントを含むエレメントリストから選択されることを特徴とする請求項１に記載の方法。
【請求項１１】
前記親エレメントを展開して前記ユーザインターフェースエレメントを可視化することは、トップダウン展開またはボトムアップ展開を使用することをさらに含むことを特徴とする請求項１に記載の方法。
【請求項１２】
前記ユーザインターフェースエレメントが選択可能になるようにすることは、前記ユーザインターフェースオブジェクトに関連する前記ウィンドウが、ユーザ入力について準備ができているようにすることを含むことを特徴とする請求項１に記載の方法。
【請求項１３】
前記ユーザインターフェースオブジェクトに関連する前記ウィンドウが、入力について準備ができているようにすることは、前記ユーザインターフェースオブジェクトに関連するウィンドウにフォーカスを提供すること、前記インターフェースオブジェクトに関連するスレッドをフォアグラウンドスレッドにすること、または前記ユーザインターフェースオブジェクトをカバーする別のオブジェクトが存在しないようにすることのうちの少なくとも１つを含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
可視化すべき前記ユーザインターフェースエレメントは、祖父母エレメントを含み、ボトムアップスクロールすることは、
前記親エレメントをスクロールして、前記ユーザインターフェースエレメントを前記親エレメント内で可視化すること、
前記祖父母エレメントをスクロールして、前記親エレメントを前記祖父母エレメント内で可視化すること、および、
前記親エレメントをスクロールして、前記ユーザインターフェースエレメントを前記祖父母エレメント内で可視化すること
を含むことを特徴とする請求項１に記載の方法。
【請求項１５】
請求項１に記載の方法をコンピュータシステムに実施させるためのコンピュータ実行可能命令を記憶することを特徴とするコンピュータ読取り可能記憶媒体。
【請求項１６】
ユーザインターフェースオブジェクトを可視化する方法であって、
自動化を使用してテストすべきグラフィカルユーザインターフェース内の複数のインターフェースオブジェクトから、オブジェクト階層の基底に存在するユーザインターフェースオブジェクトを選択すること、
前記ユーザインターフェースオブジェクト階層を前記基底オブジェクトから最上部オブジェクトの子までトラバースし、現在のオブジェクトの各親オブジェクトを前記現在のオブジェクトが前記親オブジェクトにオーバーラップするまでスクロールすること、
前記ユーザインターフェースオブジェクト階層を前記基底オブジェクトから最上部オブジェクトの孫までトラバースし、現在のオブジェクトの各親オブジェクトを前記現在のオブジェクトが前記祖父母オブジェクトにオーバーラップするまでスクロールすること、および、
前記ユーザインターフェースオブジェクトに関連するウィンドウがユーザ入力について準備ができているようにすること
を含むことを特徴とする方法。
【請求項１７】
スクロールすることは、方向ｘ、ｙ、およびｚのうちの少なくとも一方向にスクロールすることをさらに含むことを特徴とする請求項１６に記載の方法。
【請求項１８】
請求項１６に記載の方法をコンピュータシステムに実施させるためのコンピュータ実行可能命令を記憶することを特徴とするコンピュータ読取り可能記憶媒体。
【請求項１９】
ユーザインターフェースを有するコンピュータシステムにおいて、
複数の階層的に構成されたノードを含むユーザインターフェースオブジェクトと、
ユーザインターフェースオブジェクトが可視的であることを要求するアクション要求モジュールと、
前記アクション要求モジュールを起動する自動テスタモジュールと、
オブジェクトの階層をトラバースする階層トラバースモジュールと、
親オブジェクトを展開して、前記ユーザインターフェースオブジェクトを可視化する展開モジュールと、
前記親オブジェクトのエレメントを探索して前記親オブジェクト内で子オブジェクトの所在を見出す親内所在モジュールと、
前記親オブジェクトをスクロールして前記子オブジェクトを祖父母オブジェクト内で可視化する祖父母内所在モジュールと、
前記ユーザインターフェースオブジェクトに関連するウィンドウがユーザ入力を受け入れる準備ができているようにするウィンドウ準備モジュールと
を含むことを特徴とするコンピュータシステム。
【請求項２０】
階層的に構成された１組のユーザオブジェクトの一部分であるユーザオブジェクト、および親オブジェクトの前記子オブジェクトの、１つのコンポーネントであるユーザオブジェクトエレメントをテストプログラムが可視化すべきものとして指定する手段と、
前記階層的に構成された１組のユーザオブジェクトを階層的にトラバースする手段と、
親オブジェクトをスクロールして指定された子オブジェクトを表示する手段と、
親オブジェクトをスクロールして祖父母オブジェクト中で指定された子オブジェクトを表示する手段と、
ユーザオブジェクトを展開して指定された子オブジェクトを表示する手段と、
ユーザオブジェクトのエレメントリストを探索して指定されたリストオブジェクトの所在を見出す手段と、
前記指定された子オブジェクトが選択可能であるようにする手段と
を含むことを特徴とするユーザインターフェースサービス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ソフトウェアアプリケーションのテストに関し、より詳細には、テストすべきグラフィカルユーザインターフェースアイテムの可視性を確実にすることに関する。
【背景技術】
【０００２】
現代の世界においては、我々は、我々のコンピュータ、およびコンピュータが実行するアプリケーションに依存している。我々は、職場生活および家庭生活のまさにあらゆる態様において、正しく実行するために我々のソフトウェアに依存している。ソフトウェアエラーは、医用アプリケーション、銀行アプリケーション、飛行機および自動車における制御など、多くの状況において深刻な問題を引き起こす可能性がある。
【０００３】
したがって、コンピュータアプリケーションプログラムが適切に機能することは、非常に重要である。かかる信頼性を保証するために、これらのアプリケーションをテストして、これらのアプリケーションができるだけ少ないエラー、すなわち「バグ」しかもたないようにする必要がある。アプリケーション開発の当初の日々においては、コンピュータソフトウェア会社は、社内テスト要員を雇用して、エンドユーザ入力を模倣し、それによってコード中の問題を発見しようと試みる。すなわち、今日まで使用されている方法を試みるはずである。別の一般的なテストの方法は、ベータバージョン（依然としてエラーを含んでいることが知られているソフトウェア）を顧客サイトに出荷することである。この場合に、これらの顧客は、ソフトウェアを使用することにより、ソフトウェアを継続してテストする。しかし、社内テストでもベータテストでも共に、十分にエラーのないコンピュータアプリケーションを実現するのに十分な多数のエラーを見出すには、過度に長い期間、または非常に多数のユーザサイトが必要になる。これらの問題を解決するために、自動テストプログラムが開発されてきており、これらの自動テストプログラムは、キーボードユーザ入力およびマウスユーザ入力を模倣し、またこれらの自動テストプログラムは、人間と違って連続して高速に実行されるので、これらを使用して、アプリケーションをずっと迅速にテストすることができる。したがって、これらの自動テストプログラムを使用して、アプリケーションをより徹底的にテストすることができ、より高品質のソフトウェアがもたらされる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
アプリケーションの制御アイテムをテストするために、キーボードデータおよびマウスデータをエミュレートするテストプログラムは、画面上のアイテムを選択できる必要がある。少なくとも、このアイテムは、このアイテムが選択されるためには可視的である必要がある。本明細書中における用語「アイテム選択（Select Item）」は、マウス、キーボード、または他の入力デバイスを介した、ＵＩ（User Interface）エレメント（アイテム）とのユーザ対話を意味する。
【課題を解決するための手段】
【０００５】
本明細書中で説明するように、ユーザインターフェースオブジェクトが可視的であることによって、自動テストプログラムによって選択できるようにする方法を提供する。様々な技法およびツールは、組み合わせて、または独立に使用することができる。開示される例示の装置および方法は、決して限定されるものと解釈すべきではではない。その代わりに、本開示は、単独、ならびに互いに様々な組合せおよび一部組合せの形で、様々な開示される実施形態の、新規であり進歩性のある特徴および態様を対象としている。これらの方法は、どのような特定の態様、特徴、またはこれらの組合せにも限定されず、またこれらの開示される方法は、１つまたは複数のどのような特定の利点が存在し、または問題が解決されることも必要としていない。
【０００６】
一実装形態においては、ユーザインターフェースエレメントの階層は、可視化されるべきユーザインターフェースエレメントの親エレメントまでトラバース（traverse）される。次いで、子可視化アクション（make-child-visible action）が実施される。オブジェクトがスクロール可能な場合、子可視化アクションは親オブジェクトをスクロールして、直接の子オブジェクトを可視化する。オブジェクトが展開可能な場合には、子可視化アクションは、オブジェクトを展開する。一度オブジェクトが可視化されると、オブジェクトが存在するウィンドウが無効化され、フォーカスをもたない場合、あるいはオブジェクトをカバーする別のオブジェクトが存在する場合には、このオブジェクトは、依然として選択可能（すなわち、このオブジェクトがユーザまたはユーザのエミュレーションテストプログラムによってクリックされたときに選択されることが可能）でないこともある。これらの状態は、オブジェクトが選択可能になるようにするために検査される。
【０００７】
一実施形態においては、トップダウンアプローチを使用して、スクロール可能オブジェクトを可視化する。親のオブジェクトビューエリア内の可視的であるエレメントの親の中の、第１のエレメントの所在が見出され、この第１の可視的なエレメントのロケーションが、可視化すべきエレメントのロケーションと比較され、次いで親が適切な方向にスクロールされる。時には、可視化すべきエレメントが、スクロールするオブジェクトの端部に到達する前に見えなくなってしまうこともある。この場合には、スクロールする方向が反対にされる。バイナリ探索を実施して、第１の可視的なエレメントの所在を見出すことができる。一部の実施形態においては、以前に探索しているロケーションを、ハッシュテーブル中でマーク付けして、これらのロケーションが一度しか検査されないようにする。
【０００８】
別の実施形態においては、スクロール可能なオブジェクトは、ボトムアップアプローチを使用して可視化される。選択されたユーザインターフェースオブジェクトの階層は、最下部から最上部へとトラバースされる。最下部オブジェクトの親から出発して、各親オブジェクトがスクロールされて、親オブジェクト内の子オブジェクトが表示される。最上部のオブジェクトに到達すると、階層は再び最下部へとトラバースされる。次いで各親オブジェクトは、子オブジェクトが祖父母オブジェクト内に表示されるまでスクロールされる。
【０００９】
別の実施形態においては、ユーザオブジェクト階層は、最下部から最上部へとトラバースされ、各オブジェクトは、次にそのタイプに応じて展開され、スクロールされる。
【００１０】
追加の特徴および利点は、添付図面を参照して進められる、様々な実施形態の以下の詳細な説明から明らかになろう。
【発明を実施するための最良の形態】
【００１１】
（コンピューティング環境）
図１Ａは、いくつかの説明されている実施形態を実装することができる、適切なコンピューティング環境１００Ａの一般化された実施例を示している。コンピューティング環境１００Ａは、多種多様な汎用コンピューティング環境または専用コンピューティング環境において、これらの技法およびツールを実装することができるので、用途および機能の範囲についてのどのような限定を示唆することも意図してはいない。
【００１２】
図１Ａを参照すると、コンピューティング環境１００Ａは、少なくとも１つの処理装置１１０Ａおよびメモリ１２０Ａを含んでいる。図１Ａにおいて、この最も基本的なコンフィギュレーション１３０Ａは、破線内に含まれている。処理装置１１０Ａは、コンピュータ実行可能命令を実行し、実プロセッサまたは仮想プロセッサとすることができる。マルチ処理システムにおいては、複数の処理装置が、コンピュータ実行可能命令を実行して、処理能力を増大させる。メモリ１２０Ａは、揮発性メモリ（例えば、レジスタ、キャッシュ、ＲＡＭなど）、不揮発性メモリ（例えば、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリなど）、またはこれら２つの組合せとすることができる。メモリ１２０Ａは、方法および装置を実装して、ＵＩエレメントを可視化するソフトウェア１８０Ａを記憶する。
【００１３】
コンピューティング環境は、追加の特徴を有することができる。例えば、コンピューティング環境１００Ａは、ストレージ１４０Ａ、１つまたは複数の入力デバイス１５０Ａ、１つまたは複数の出力デバイス１６０Ａ、および１つまたは複数の通信接続１７０Ａを含む。バス、コントローラ、ネットワークなどの相互接続メカニズム（図示せず）は、コンピューティング環境１００Ａのコンポーネントを相互接続する。一般的に、オペレーティングシステムソフトウェア（図示せず）は、コンピューティング環境１００Ａにおいて実行される他のソフトウェアのための動作環境を提供し、コンピューティング環境１００Ａのコンポーネントのアクティビティを協調させる。
【００１４】
ストレージ１４０Ａは、取り外し可能または取り外し不可能とすることができ、情報を記憶するために使用することができ、コンピューティング環境１００Ａ内でアクセスすることができる、磁気ディスク、磁気テープまたは磁気カセット、ＣＤ−ＲＯＭ、ＤＶＤ、または他の任意の媒体を含む。ストレージ１４０Ａは、ＵＩエレメントを可視化するメカニズムを実装するソフトウェア１８０Ａのための命令を記憶する。
【００１５】
１つ（または複数）の入力デバイス１５０Ａは、入力をコンピューティング環境１００Ａに対して供給する、キーボード、マウス、ペン、トラックボールなどの接触入力デバイス、音声入力デバイス、スキャニングデバイス、または別のデバイスとすることができる。オーディオ符号化またはビデオ符号化では、１つ（または複数）の入力デバイス１５０Ａは、アナログ形式またはデジタル形式のオーディオ入力またはビデオ入力を受け入れるサウンドカード、ビデオカード、ＴＶチューナカード、または同様なデバイスとすることができ、あるいはオーディオサンプルまたはビデオサンプルをコンピューティング環境１００Ａ内に読み込むＣＤ−ＲＯＭまたはＣＤ−ＲＷとすることができる。１つ（または複数）の出力デバイス１６０Ａは、コンピューティング環境１００Ａからの出力を提供するディスプレイ、プリンタ、スピーカ、ＣＤ−ライタ、または別のデバイスとすることができる。
【００１６】
１つ（または複数）の通信接続１７０Ａは、通信媒体上で別のコンピューティングエンティティに対する通信を可能にする。通信媒体は、コンピュータ実行可能命令、オーディオまたはビデオの入力または出力、被変調データ信号の形の他のデータなどの情報を伝達する。被変調データ信号は、信号中の情報を符号化するようにして、１つまたは複数の特性が設定または変更されている信号のことである。実施例として、限定するものではないが、通信媒体は、電気キャリア、光キャリア、無線周波数（RF）キャリア、赤外線キャリア、音響キャリア、または他のキャリアを用いて実装される有線技法または無線技法を含んでいる。
【００１７】
これらの技法およびツールは、コンピュータ読取り可能記憶媒体の一般的な文脈で説明することができる。コンピュータ読取り可能記憶媒体は、コンピューティング環境内でアクセスすることができる、使用可能な任意の媒体である。実施例として、限定するものではないが、コンピューティング環境１００Ａと共に、コンピュータ読取り可能記憶媒体は、メモリ１２０Ａ、ストレージ１４０Ａ、通信媒体、および上記の任意の組合せを含んでいる。
【００１８】
これらの技法およびツールは、ターゲット実プロセッサまたはターゲット仮想プロセッサ上のコンピューティング環境内で実行される、プログラムモジュール内に含まれる命令などのコンピュータ実行可能命令の一般的な文脈で説明することができる。一般的に、プログラムモジュールは、個々のタスクを実施し、個々の抽象データ型を実装するルーチン、プログラム、ライブラリ、オブジェクト、クラス、コンポーネント、データ構造などを含む。これらのプログラムモジュールの機能は、様々な実施形態において必要に応じてプログラムモジュール間で組み合わせ、または分離することができる。プログラムモジュールについてのコンピュータ実行可能命令は、ローカルコンピューティング環境または分散コンピューティング環境内で実行することができる。
【００１９】
必要な場合には、本明細書中で説明する（すなわち、ユーザインターフェースアイテムを可視的であり、そのために自動テストについて選択することができるようにする）技術は、自動テストサービスの一部分として提供されることができる。このサービスと相互作用するプログラムは、したがって、必要に応じてその特徴を利用することができる。
【００２０】
本明細書中で説明している様々な技術は、ユーザインターフェースエレメントを可視的であり、選択可能になるようにするために有用である。ユーザインターフェースエレメントは、グラフィカルプッシュボタン、編集ボックス、スクロールバー、ピックリスト（picklist）、ドロップダウンメニュー、ＡＣＴＩＶＥＸコントロール、イメージなど多くの形態を取ることができる。ユーザインターフェースエレメントは、（例えば、プログラムの機能を制御する）プログラムの一部分として、またはドキュメント内に現れることができる。
【００２１】
本発明は、ＧＵＩ（graphical user interface グラフィカルユーザインターフェース）エレメントが可視的であり、その結果、自動テストプログラムによってＧＵＩエレメントが選択でき、それによってテストできるようにすることによる、ソフトウェアアプリケーションの自動テストを対象としている。用語「可視的（visible）」は、本明細書中で以下のように定義される。すなわち、ＧＵＩエレメントは、画面上でクリック可能なＧＵＩエレメントに属する少なくとも１つの可視的な箇所が存在する場合に、可視的であると定義される。クリック可能であるためには、この箇所は、可視的であり有効になっている必要もあり、また別のオブジェクトによってカバーされていない必要もある。
【００２２】
図示するために、以下の詳細な説明においては、可視化することができる可視的なＧＵＩエレメントの実施例として、リストボックスおよびツリー構造が使用される。しかし、示されるこれらの実施形態は、リストボックスおよびツリービュー（treeview）だけには限定されず、コンボボックス（combo box）、メニュー、マルチカラム（multi-column）リストボックス、マルチカラムコンボボックス、複数選択拡張リストボックス、ＡｃｔｉｖｅＸコントロール、マルチラインテキストボックス、ラジオボタン、トグルボタン、および／またはプッシュボタンを組み込んでいるコントロール、スクロールペイン、タブ化ペイン、カレンダ、ウィンドウ、ならびに標準名のない多種多様なカスタムコントロールなど、他の任意の可視的なＧＵＩコントロールへと一般化することもできることを当業者には理解されたい。
【００２３】
本明細書中で説明するように、これらの単語、すなわちコントロール、エレメント、アイテム、およびオブジェクトは、交換可能であり、またコンテナなどのアイデアも包含している。かかるすべてのリストアップされた単語の背後にあるアイデアは、任意の閲覧可能なオブジェクト、コンボボックス、メニュー、マルチカラムリストボックス、マルチカラムコンボボックス、複数選択拡張リストボックス、マルチラインテキストボックス、ラジオボタン、トグルボタン、および／またはプッシュボタンを組み込んでいるコントロール、スクロールペイン、タブ化ペイン、カレンダ、ウィンドウ、ならびにこれらの組合せを包含している。閲覧可能なオブジェクトの新しい実装形態は、絶えず作成されており、開示されるこれらの実施形態は、正式に名前が与えられていない閲覧可能なエレメントを包含している。
【００２４】
本明細書中で説明する様々な技術は、ユーザインターフェースアイテムが可視的であり、したがって、自動テストプログラムによって選択することができるようにするために有用である。ユーザインターフェースエレメントは、グラフィックプッシュボタン、編集ボックス、スクロールバー、ピックリスト、ドロップダウンメニュー、ＡＣＴＩＶＥＸコントロール、イメージなど、多くの形態を取ることができる。ユーザインターフェースエレメントは、（例えば、プログラムの機能を制御する）プログラムの一部分として、またはドキュメント内に現れることができる。ユーザインターフェースアイテムが可視的である場合に限り、ユーザインターフェースアイテムは、マウス、キーボード、または他のユーザインターフェースエミュレーションを使用して、ターゲットＵＩ−ベースアプリケーションを動かすテスト装置によって選択することができる。例えば、グラフィカルユーザインターフェースにより、ユーザは、いつでも、非常に多くのオプションを選択することができるようになる。使用可能な無数の選択肢のうちから、ユーザは、新しいアプリケーションをオープンすることができ、オープンしているアプリケーション中でアイテムを選択することができ、あるいは選択してオペレーティングシステムのデフォルト設定を修正することができる。
【００２５】
この柔軟性のために、グラフィカルユーザインターフェースは、グラフィカルユーザインターフェースを介したほとんど無限数の経路を有し、これらの少なくとも一部分をテストして、基礎をなすプログラムができる限りバグがないようにする必要がある。無限の経路の問題に起因して、グラフィカルユーザインターフェースを含むプログラムを満足できるようにテストするには、複数のベータサイトにおけるどのサイトでも、人々による拡大テスト期間が必要になる可能性がある。この問題に対応するために、ＧＵＩを有するプログラム内で使用可能ないくつかのオプションをより正確に実行するユーザのキーボード入力およびマウス入力を模倣する自動テストプロシージャが開発されてきている。しかし、ＧＵＩ内のアイテムをテストするためには、アイテムは、まず可視的であり、選択可能である必要がある。
【００２６】
この説明全体を通して、スクロールすることの概念が、その最も一般的な言葉で言及されている。異なるＧＵＩエレメントは、異なる方法でスクロールする。リストボックスなどのＧＵＩエレメントは、異なるオペレーティングシステム中において、または同じオペレーティングシステムの下で実行される異なるプログラム中においてさえ、異なってスクロールすることができる。
【００２７】
（概要）
図１Ｂを参照すると、フローチャート１００Ｂは、本明細書中で開示される方法の簡単な概要を示している。可視化すべきユーザインターフェースエレメントが、選択される。この選択は、ユーザインターフェーステストプログラムによって行うことができる。プロセスブロック１０２Ｂにおいて、ユーザインターフェースエレメントの親が決定される。一般に、リストボックス中のエレメントが可視化される必要がある場合には、エレメントに関連するリストボックスについて知る必要がある。このプロセスブロックは、その決定を行う。プロセスブロック１０４Ｂにおいて、子可視化アクションが実施される。図２を参照して、より十分に説明されるこのプロシージャは、ユーザインターフェースオブジェクトを画面上で可視化する。しかし、別のボックスがそれをカバーしている可能性があり、オブジェクトが属するウィンドウがフォーカスを有さないこともあり、あるいは何か他のものが選択性に影響を及ぼす可能性があるので、時に可視性が、オブジェクトを選択可能にするのに不十分なこともある。このプロシージャは、可視的なオブジェクトが選択可能になるようにするために検査する。
【００２８】
図２のフローチャートに示される例示の方法２００を利用して、プロセスブロック１０４Ｂに示される子可視化アクションを実施することができる。例示の方法２００は、前述の例示の方法を展開する特定の実施形態を表しているが、決して限定するものと解釈すべきではない。その代わりに、この方法は、開示された技術の範囲を逸脱することなく構成および細部において修正を行うことができる。例えば、説明されるある種の動作は、特定の実施形態において省略することができ、またある種の動作は、示される順序と異なる順序で実施することもできる。
【００２９】
特定のエレメントが見えるようにするために、スクロールおよび展開の組合せを必要とする、ある複合画面オブジェクトが存在する。かかるオブジェクトでは、その階層ツリーのセクションは、トップダウンアプローチを用いて処理され、ツリーの別のセクションは、必要に応じて、ボトムアップアプローチを用いて処理され、一部のエレメントファミリは、ボトムアップアプローチを使用して可視化され、他のエレメントファミリは、トップダウンアプローチを使用して可視化される。これは、プロセスブロック２０２に表されており、ここで、所与のユーザインターフェースオブジェクトの関係のある階層最上部が決定される。
【００３０】
２０４において、オブジェクトが、一部の実施形態において、ツリーリストなどの展開すべき種類のものである場合には、次いで２０６において、オブジェクトは展開される。この展開は、ボトムアップまたはトップダウンのいずれかの可能性がある。２０８において、オブジェクトがスクロールすべき種類のものである場合、２１０において、オブジェクトおよびその階層の親がボトムアップでスクロールされる可能性、または２１４において、これらがトップダウンでスクロールされる可能性の２つの可能性が存在する。行う必要がある、別のレベルの展開またはスクロールが依然として存在する可能性があるので、これにより、依然として画面上でのオブジェクトの可視性が確実にならないこともあるが、この場合には、２１８において、このプロセスは反復される。
【００３１】
プロセスブロック２１０に示すように、ある種の実施形態においては、ユーザインターフェースエレメントは、ボトムアップアプローチを使用して可視化することができ、ここでは、ユーザインターフェースエレメントの親は、ユーザエレメントが、親オブジェクトのクライアントエリア内に現れるまで、スクロールされる。このオペレーションは、階層におけるユーザインターフェースエレメントの最上部オブジェクトに到達するまで、再帰的に実施される。その後、ユーザインターフェースオブジェクトの親オブジェクトは、ユーザインターフェースオブジェクトが、祖父母オブジェクト中で可視的になるまでスクロールされる。このオペレーションはまた、ユーザエレメントが階層の最上部エレメントと共に現れるまで再帰的に実施され、それによって画面上で可視的になる。一度エレメントが可視的になると、次いでエレメントは、自動テストプログラムによって選択することができる。例示の実施形態は、ユーザインターフェースエレメントおよびその階層の先祖の境界長方形が知られているときに、ボトムアップアプローチを使用する。
【００３２】
他の実施形態においては、プロセスブロック２１６に示すように、ユーザインターフェースエレメントは、トップダウンアプローチを使用して可視化することができ、ここでは、階層の最上部エレメントは、その子エレメントが可視的になるまでスクロールされる。このオペレーションは、ユーザインターフェースエレメントに到達するまで再帰的に実施される。例示の実施形態は、ユーザインターフェースエレメントおよびその階層の先祖の境界長方形が知られていないときには、トップダウンアプローチを使用する。
【００３３】
プロセスブロック２１６に示すように、ある種の実施形態においては、ユーザインターフェースエレメントは、それがツリービュー中における隠されたノードである場合など、そのビューが折りたたまれているので、隠れている。一部のかかる場合においては、エレメントは、展開され、すべての親エレメントもまた、最下部から最上部へとエレメント階層を上方に展開される。これによって、元のエレメントが可視的になることが保証される。そのビューが折りたたまれているのでエレメントが隠されている他の実施形態においては、エレメント階層は、最上部の閲覧可能エレメントまでトラバースされ、次いでツリーは、最上部から最下部へとトラバースされ、各展開可能ノードが、順に展開される。展開されたオブジェクトの表現の全体ビューは、展開されたビュー全体が画面上に収まらないほど十分に複雑になり得る。かかる場合には、元のユーザインターフェースエレメントは、画面に収まるようなエレメント階層の部分と一緒に表示される。
【００３４】
時には、ユーザインターフェースエレメントのウィンドウまたはスレッドに関連しない１つまたは複数のオブジェクトが、その上部にあり、ビューをブロックしてしまうので、ユーザインターフェースエレメントが可視的でないこともある。他にも時に、ユーザインターフェースエレメントは見ることができるが、別のオブジェクトがその上に置かれているので、依然として選択することができないこともある。かかる場合においては、ユーザインターフェースエレメントおよびその関連するウィンドウは、ウィンドウフォーカスを提供することにより、Ｚ軸の位置を調整することにより、ウィンドウに関連するスレッドをフォアグラウンドスレッドとすることにより、あるいは他の何らかの手段によって、画面の前面にプッシュされる。これは、選択すべきエレメントが、ディスプレイ中の最上位のウィンドウにあり、それによって可視的であり、選択可能になるようにする。これは、プロセスブロック２２０に表されている。
【００３５】
フローチャート２００は、単に例示の一実施形態を示しているにすぎず、決して限定するものとして解釈すべきではない。例えば、このフローチャートにおけるプロセスブロック２０４および２０８においてなされる展開またはスクロールする判断は、階層がトラバースされるのに先立ってなど、他のロケーションにおいて行うこともできる。方法２００は、コンピューティング環境１００Ａ中に常駐するテストツールが実行することもでき、ソフトウェア、ハードウェア、または両方の組合せの形で実装することもできる。
【００３６】
必要に応じて、（例えば、テストすべきアイテムが可視的になるようにする）本明細書中に説明している技術は、自動テストサービスの一部分として実現することができる。さまざまなタイプのオブジェクトは、その性質に合うように、本明細書中に開示された方法のさまざまなインスタンス化（instantiation）を有することができる。このサービスと対話するプログラムは、したがって、必要に応じてこの特徴を利用することができる。
【００３７】
（ユーザインターフェース中のエレメントが可視的になるようにする例示のボトムアップの方法）
図３は、ＵＩオブジェクトを可視化する、開示された実施形態を実施するための基本的なプロシージャのフローチャートである。フローチャート３００は、単に例示の一実施形態を示しているにすぎず、決して限定するものとして解釈すべきではない。図４Ａ〜４Ｈは、一括して、図２に開示され、図３でさらに詳述されたプロシージャを利用した実施例の図である。コントロールの境界長方形が知られているときには、このボトムアップアプローチを使用することができる。コントロールの境界長方形は、コントロールが、オペレーティングシステムが提供するツールを使用して作成された標準的なものであるとき、または、かかる長方形が、作成されるときに別の方法で指定されるときに、知ることができる。図４Ａは、可視化すべき（「Ｍｉｎｔ」４０８Ａとラベル付けされた）ターゲットユーザインターフェースエレメントを有する、例示のユーザインターフェース４００Ａを示す。
【００３８】
エレメントが可視的であるためには、エレメントは、エレメントを所有するウィンドウの境界内に物理的に存在する必要がある。同様に、コントロール内の各エレメントは、エレメントを見るためのコントロールウィンドウの境界内に物理的に存在する（すなわち、その中に表示される）必要がある。ユーザインターフェースエレメント「Ｍｉｎｔ」４０８Ａは、リストボックス「ＨｅｒｂＬｉｓｔ」４０６Ａ中のエレメントであり、「ＨｅｒｂＬｉｓｔ」リストボックスビューウィンドウ中に現在は存在していないので、現在は見えなくなっている。「ＨｅｒｂＬｉｓｔ」４０６Ａは、それ自体、リストボックス「ＦｏｏｄＬｉｓｔｓ」４０４Ａ中のエレメントである。リストボックス「ＦｏｏｄＬｉｓｔｓ」４０４Ａは、ウィンドウ「ＦｏｏｄＷｉｎｄｏｗ」４０２Ａに属しているが、現在はウィンドウの下にスクロールされており、そのため、同様に見ることができない。
【００３９】
ソフトウェア中でユーザインターフェースエレメントを表す一般的な１つの方法は、様々なノードを有する階層ツリーの形式でそれを記憶することである。図４Ｂは、図４Ａに示すユーザインターフェースエレメントの例示の階層表現を示す。ノード４０２Ｂ〜４１２Ｂは、親子関係を有するように示されている。ユーザインターフェースエレメントは、他のユーザインターフェースエレメントの表現についての親ノードとすることができるので、この関係の複雑な性質に留意されたい。この実施形態において、リストボックス「ＦｏｏｄＬｉｓｔｓ」４０４Ｂは、３つの子リストボックス４０６Ｂ、４０８Ｂ、および４１０Ｂ（それぞれ、「ＮｕｔＬｉｓｔ」、「ＶｅｇＬｉｓｔ」、および「ＨｅｒｂＬｉｓｔ」）の親である。
【００４０】
図３は、前述の概念を利用した、テストすべきオブジェクトを可視的になるようにするための基本的なプロシージャのフローチャート３００である。フローチャート３００は、単に例示の一実施形態を示しているにすぎず、決して限定するものとして解釈すべきではない。これらのステップは、コンピューティング環境１００Ａ中に常駐するテストツールによって実行することができ、ソフトウェア、ハードウェア、または両方の組合せの形で実装することもできる。
【００４１】
プロセスブロック３０２において、可視化したいと望むエレメントの階層が決定される。図４Ｃは、可視化すべき、「Ｍｉｎｔ」４０８Ａとラベル付けされたインターフェースエレメントに関連するノード階層を表示する、図４Ｂに示すインターフェースエレメントの簡略化されたビューである。図から分かるように、図４Ｂに示す階層は、「Ｍｉｎｔ」４０２Ｃとラベル付けされた可視化すべきエレメントから開始して、その直接の親「ＨｅｒｂＬｉｓｔ」４０４Ｃの所在を見出し、次いで「ＦｏｏｄＬｉｓｔｓ」４０６Ｃへとトラバースされ、この階層の最上部「ＦｏｏｄＷｉｎｄｏｗ」４０８Ｃへとトラバースされる。
【００４２】
プロセスブロック３０４において、現在のエレメントが親を有するかどうかが判定される。親を有する場合、このプロセスは、プロセスブロック３０６に続く。親を有さない場合には、このプロセスは、プロセスブロック３１０に続く。図４Ｃを参照すると、「Ｍｉｎｔ」４０２Ｃ、すなわち現在のエレメントは、親、すなわち「ＨｅｒｂＬｉｓｔ」４０４Ｃを有することが分かる。
【００４３】
プロセスブロック３０６において、現在のエレメント（この例示の実施形態におけるＭｉｎｔ４０２Ｃ）は、その親（「ＨｅｒｂＬｉｓｔ」４０４Ｃ）にオーバーラップするまで、移動される（リストボックスの場合にはスクロールされる）。所与のエレメントについて必要な移動は、実装に固有であるが、当業者なら簡単に確認することができる。図４Ｄを参照すると、「ＨｅｒｂＬｉｓｔ」４０４Ｄは、エレメント「Ｍｉｎｔ」４０２Ｄがリストボックス「ＨｅｒｂＬｉｓｔ」４０４Ｄのビューエリアにオーバーラップするまでスクロールされる。場合によっては、オブジェクトは、これら２つのオブジェクトがオーバーラップするために、複数の方向に移動する必要があることになる。
【００４４】
プロセスブロック３０８において、階層は１レベル上に移動され、これは、（以前の）親エレメントを現在のエレメントとする効果を有する。継続して図４Ｃを参照すると、「ＨｅｒｂＬｉｓｔ」４０４Ｃ、すなわち「Ｍｉｎｔ」４０２Ｃの親が、現在のエレメントになる。プロセスは、プロセスブロック３０４から継続され、ここで、現在のエレメント「ＨｅｒｂＬｉｓｔ」４０４Ｃが、親「ＦｏｏｄＬｉｓｔｓ」４０６Ｃを有することが判定される。次いで、図４Ｅに示すように、プロセスブロック３０６において、現在のエレメント「ＨｅｒｂＬｉｓｔ」４０２Ｅは、それが「ＦｏｏｄＬｉｓｔｓ」４０６Ｅにオーバーラップするまでスクロールされる。プロセスブロック３０４、３０６、および３０８を反復して、図４Ｆは、自身の親「ＦｏｏｄＷｉｎｄｏｗ」４０６Ｆにオーバーラップする「ＦｏｏｄＬｉｓｔｓ」４０４Ｆを示す。
【００４５】
一度階層が、最上部エレメントまでトラバースされると、プロセスは、プロセスブロック３１０に継続する。図４Ｆから分かるように、可視化すべきターゲットエレメント（「Ｍｉｎｔ」４０２Ｆ）は、依然として階層の最上部における可視的なオブジェクトの外側にある可能性がある。ターゲットエレメントが可視的になるようにするために、階層における各親エレメントが、最下部から最上部へとスクロールされて、祖父母エレメント中の子エレメントを見えるようにする。プロセスブロック３１０において、図４Ｃに示すようにオブジェクト階層が、再び最上部から可視化すべきエレメントの親、すなわち「ＨｅｒｂＬｉｓｔ」４０４Ｃまでトラバースされて、次いで「ＨｅｒｂＬｉｓｔ」４０４Ｃが現在のエレメントになる。プロセスブロック３１２において、現在のエレメントが、親エレメントを有するかどうかが判定される。親エレメントが存在しない場合、プロセスは終了する。親エレメントが存在する場合には、プロセスは、プロセスブロック３１４に継続する。プロセスブロック３１４において、現在のオブジェクトは、ターゲットオブジェクトの境界長方形が、現在のオブジェクトの親の境界長方形とオーバーラップするまでスクロールする。図４Ｇを参照すると、現在のオブジェクト「ＨｅｒｂＬｉｓｔ」４０４Ｇは、ターゲットオブジェクト「Ｍｉｎｔ」４０２Ｇの境界長方形が、「ＨｅｒｂＬｉｓｔ」４０４Ｇの親オブジェクト「ＦｏｏｄＬｉｓｔｓ」４０６Ｇの境界長方形とオーバーラップするまでスクロールする。しかし、「ＨｅｒｂＬｉｓｔ」４０４Ｇ、および「Ｍｉｎｔ」４０２Ｇは、依然として「ＦｏｏｄＷｉｎｄｏｗ」４０８Ｇ内で可視的ではない。
【００４６】
プロセスブロック３１６において、階層は、１レベル上に移動され、現在のエレメントの親エレメントが、新しい現在のエレメントになる。次いで、プロセスブロック３１２、３１４、および３１６は、プロセスが、親エレメントのないエレメントに到達するまで反復される。図４Ｈは、ターゲットオブジェクト「Ｍｉｎｔ」４０２Ｈの境界長方形が、「ＦｏｏｄＬｉｓｔｓ」４０６Ｈの親、すなわち「ＦｏｏｄＷｉｎｄｏｗ」４０８Ｈ内に現れるまでスクロールした、現在のエレメント「ＦｏｏｄＬｉｓｔｓ」４０６Ｈとともに、このプロセスの次の反復結果を示す。これは、「Ｍｉｎｔ」４０２Ｈとラベル付けされたエレメントを、その階層の最上部のエレメント「ＦｏｏｄＷｉｎｄｏｗ」４０８Ｈの内部に見えるようにし、「Ｍｉｎｔ」４０２Ｈを可視化している。階層の最上部において、プロセスブロック３１２において親エレメントが存在しないと判定された後に、プロセスは、可視化すべき元のエレメント「Ｍｉｎｔ」４０２Ｈが、その階層の最上位エレメント内で現在可視的になっている状態で終了する。
【００４７】
（ユーザインターフェース中のエレメントが可視的になるようにする例示のトップダウンの方法）
図５は、トップダウンの方法を使用してＵＩオブジェクトを可視化する、開示された実施形態を実装するための基本的なプロシージャのフローチャート５００である。例示の実施形態において、以下の方法を使用して、かかるオブジェクトを可視化する。図５のフローチャートを参照すると、５０２において、可視化すべきターゲットオブジェクトが選択された後に、ターゲットオブジェクトの階層は、階層の最上部のオブジェクトに到達するまでトラバースされる。これは、ターゲットオブジェクトの可視性を確実にするために修正を必要とする可能性のあるすべてのオブジェクトのリストを提供する。
【００４８】
フローチャート５００は、単に例示の一実施形態を示しているにすぎず、決して限定するものとして解釈すべきではない。図６Ａ〜６Ｃは、一括して、図５に開示されたプロシージャを利用した実施例の図であり、以前の実施形態に示される同じユーザインターフェースエレメントを使用している。図４Ａを再び参照すると、「Ｍｉｎｔ」４０８Ａとラベル付けされたユーザインターフェースエレメントが、可視化されるべきものである。この例示のユーザインターフェース中でエレメントを可視的にする（または表示する）ためには、エレメントは、エレメントを所有するウィンドウの境界内に物理的に存在する必要がある。
【００４９】
図５は、前述の概念を利用した、テストすべきオブジェクトが可視的になるようにするための基本的なプロシージャのフローチャート５００である。フローチャート５００は、単に例示の一実施形態を示しているにすぎず、決して限定するものとして解釈すべきではない。これらのステップは、コンピューティング環境１００Ａ中に常駐するテストツールによって実行することができ、ソフトウェア、ハードウェア、または両方の組合せの形で実装することができる。
【００５０】
一度可視化すべきターゲットエレメントが選択されると、プロセスブロック５０２において、ターゲットエレメントの階層は、階層の最上部のエレメントに到達するまでトラバースされる。これは、ターゲットオブジェクトの可視性を確実にするための修正を必要とする可能性のあるすべてのオブジェクトのリストを提供する。図４Ｃを再び参照すると、可視化すべきエレメント（「Ｍｉｎｔ」４０２Ｃ）の階層的表現が示されている。階層の最上部エレメントは、「ＦｏｏｄＷｉｎｄｏｗ」４０８Ｃである。これが、現在のエレメントになる。同時に、現在のエレメントの直接の子エレメントが決定される。例示の実施形態において、子エレメントは、「ＦｏｏｄＬｉｓｔｓ」４０６Ｃである。プロセスブロック５０４において、ターゲットエレメントが、スクロール可能かどうかが判定される。スクロール可能な場合、プロセスは、プロセスブロック５０６に継続する。スクロール可能でない場合には、プロセスは、プロセスブロック５１４に継続する。
【００５１】
プロセスブロック５０６において、現在のエレメントは、子エレメントが親エレメント内に表示されるまでスクロールする。図６Ａは、ウィンドウ「ＦｏｏｄＷｉｎｄｏｗ」６０２Ａ内で可視的になるまでスクロールされることにより、子エレメント「ＦｏｏｄＬｉｓｔｓ」６０４Ａが、階層の最上部エレメント内で可視的にされた後の、例示の実施形態を示す。
【００５２】
プロセスブロック５０８において、階層は、現在の子エレメント（例示の実施形態においては「ＦｏｏｄＬｉｓｔｓ」６０４Ａ）が、新しい現在のエレメントになるように、１レベル下にトラバースされる。プロセスブロック５１０において、現在のエレメントが子エレメントを有するかどうかが判定される。子エレメントを有する場合、次いでプロセスはプロセスブロック５０４に継続する。子エレメントを有さない場合には、プロセスは終了する。
【００５３】
図６Ｂは、本明細書中で説明しているこの方法の次の反復を行った結果を示している。「ＦｏｏｄＬｉｓｔｓ」６０４Ｂは、現在のエレメントであり、「ＨｅｒｂＬｉｓｔ」６０２Ｂは、子エレメントである。「ＨｅｒｂＬｉｓｔ」６０２Ｂは、「ＨｅｒｂＬｉｓｔ」６０２Ｂが、「ＦｏｏｄＷｉｎｄｏｗ」６０６Ｂ内で可視的になるまで、「ＦｏｏｄＬｉｓｔｓ」６０４Ｂ内でスクロールされる。
【００５４】
図６Ｃは、例示の実施形態のための方法の最後の反復を示している。すなわち、「ＨｅｒｂＬｉｓｔ」６０６Ｃは親であり、「Ｍｉｎｔ」６０２Ｃは子である。「ＨｅｒｂＬｉｓｔ」６０６Ｃは、「Ｍｉｎｔ」６０２Ｃが、階層の最上部フォーム「ＦｏｏｄＷｉｎｄｏｗ」６０４Ｃ中で可視的になるまで、スクロールされる。
【００５５】
プロセスブロック５０４において、現在のエレメントがスクロール可能でない場合には、プロセスブロック５１４において、現在のエレメントが、展開可能かどうかが判定される。サンプルの展開可能エレメントは、ツリーリストおよびコンボボックスである。現在のエレメントが展開可能である場合、プロセスブロック５１６において、現在のエレメントは、展開される。次いでプロセスは、プロセスブロック５０８に継続する。展開可能でない場合には、プロセスは、プロセスブロック５０８に継続する。
【００５６】
図７のフローチャートに示す例示の方法７００を利用して、エレメントを見出し、プロセスブロック５０６に示すように、これらのエレメントを可視化することができる。例示の方法７００は、前述の例示の方法を展開する特定の実施形態を表しており、決して限定するものとして解釈すべきではない。その代わりに、この方法は、開示された技術の範囲を逸脱することなく、構成および細部において修正することができる。例えば、説明するある種の動作は、個々の実施形態において省略することもできる。
【００５７】
プロセスブロック５０６において、現在のエレメントは、その階層の子エレメントが可視的になるまでスクロールされる。かかるスクロールを実施するための例示の方法が、フローチャート７００に開示されている。最初に、以下で説明する探索を実施して、現在のエレメント内で任意の可視的な子エレメントの所在を見出す。プロセスブロック７０２において、ｎ番目のエレメントごとに検査が行われる。例示の一実施形態において、最初にＮ／２番目（Ｎは親の内部のエレメント総数である）ごとに検査されるが、ｎについての最適な選択は、実装形態に依存しており、多くの場合、ｎについての最適値を決定することは難しい。一実施形態においては、エレメント総数が１００であるとき、最初に５０番目ごとのエレメントが検査される。可視的なアイテムが見出されないままリストの最下部に到達する場合、ｎ／２番目ごとにエレメントが検査され、次いでｎ／４番目ごとにエレメントが検査され、以下同様である。一部の実施形態においては、検査済みの各エレメントはハッシュテーブル中でマーク付けされて、各エレメントが一度しか検査されないようにする。引き続き図８を参照して、リストボックス８００を使用して、この方法のいくつかの態様を説明する。階層表現が図４Ｂおよび４Ｃに見出されるリストボックス「ＨｅｒｂＬｉｓｔ」８０２は、リストアイテム「Ａｌｌｓｐｉｃｅ」、「Ａｎｉｓｅ」など８０４に対する親ノードである。このリストボックス中には、１６個のアイテムしか存在せず、したがって、最大アイテム数（maxitems）／２（１６／２）が、最初の探索パラメータ（アプリケーション依存のインスタンス化）になる。８番目のアイテムは、「Ｇｉｎｇｅｒ」８０８であり、このアイテムは可視的ではなく、１６番目のアイテム「Ｖａｎｉｌｌａ」８１２も可視的ではない。プロセスブロック７０４において、可視的エレメントの所在が見出されているかどうかが判定される。見出されている場合、プロセスは、プロセスブロック７０８に継続する。エレメントの所在が見出されていない場合には、プロセスは、プロセスブロック７０６に継続する。プロセスブロック７０６において、（１／ｘ）ｎ番目のエレメントが検査され、ここでｘは現在の再帰レベルに等しい。例示の実施形態においては、これは、リストが検査される２度目に当たるので、４番目ごとのエレメント（（１／２）×８）が検査される（「Ｃｈｉｌｉ」８０６の所在が見出され、可視的になる）。一実施形態においては、エレメントがすでに可視性について検査済みである情報を記憶して、これらのエレメントが再検査されることがないようにする。この実施形態の一部のバージョンにおいては、この情報は、ハッシュテーブルに記憶されることがある。他の実施形態においては、フィボナッチ探索、ジャンプ探索、線形探索など、他の探索タイプを使用することができる。可視的なエレメントが見出された後に、バイナリ探索を使用して、実際のスクローリングにおいてアンカー（anchor）の役割を果たすことになる、第１の可視的なエレメントを見出す。
【００５８】
一度第１の可視的なエレメントの所在が見出されると、スクロールする方向は、ターゲットエレメントの適切なパラメータを、可視的なエレメント、通常はロケーションパラメータと比較することによって見出される。プロセスブロック７０８において、スクロールする方向が決定される。一部の実施形態においては、可視的なエレメント番号が、ターゲットエレメント番号と比較され、次いでスクロールする方向が、適切な方向に設定される。一度スクロールする方向が決定されると、７１４において、所望のエレメントが現在の（スクロールしている）エレメントの可視的なエリア内に表示されるまで、７１０において、エレメントはスクロールされる。時には、７１２において、エレメントを見出す前に端部に到達し、この場合には、７１６において、スクロールする方向がその反対方向に設定される。
【００５９】
図８を再び参照すると、「Ｃｈｉｌｉ」８０６は、４というエレメント番号を有し、ターゲットエレメント「Ｍｉｎｔ」８１０は、１０というエレメント番号を有する。したがってリストボックスは、７１４において、「Ｍｉｎｔ」８１０が可視的になるまでスクロールダウンされることになる。しかし、時には所望のエレメントが見出される前に、端部の所在が見出されてしまう。プロセスブロック７１２において、現在のエレメント（「ＨｅｒｂＬｉｓｔ」８０２）の端部に到達しているかどうかが判定される。到達している場合、プロセスは、プロセスブロック７１６に継続し、ここでスクロール方向がその反対方向に設定される。場合によっては、同じ方向に何回かスクロールした後に、最初の可視的なエレメントが変化しなくなることもある。この場合には、これは、間違った方向にスクロールされていることを示す指示である。したがってこの場合にも、例示の実施形態において、スクロールする方向は、その反対方向に設定されるべきである。
【００６０】
（ウィンドウがユーザデータを受け入れるようにするための例示の実施形態）
一部の実施形態において、ターゲットエレメントがターゲットウィンドウ内で可視化された後に、ユーザインターフェースエレメントに関連するウィンドウがユーザ入力を受け入れる状態にあることを確かめることによって可視性が保証される。キーボード入力の場合には、これは、時にフォーカスを有しているウィンドウと言われる。例えば、ユーザインターフェースエレメントに関連するウィンドウの上部に別のウィンドウが存在する場合、ウィンドウが無効になっている場合、あるいはウィンドウに関連するスレッドがフォアグラウンドスレッドでない場合には、ウィンドウが、ユーザ入力を受け入れる状態にない可能性がある。さまざまな実施形態において、以下の方法を使用することができるが、これらの実施例は、限定するものと考えるべきではなく、多くの場合、実装形態に依存する。一実施形態において、ｚ−インデックスは、ユーザインターフェースエレメントに関連する適切な階層オブジェクトが、画面の前面に存在するように設定される。ｚ−インデックスは、ウィンドウがコンピュータ画面のｚ軸に沿って有する値であり、ｚ軸は、コンピュータユーザに向かって、またユーザから遠ざかって延びている。一般に、最大ｚ−値を有するウィンドウが画面の前面に存在しており、ウィンドウは見えにくくなっていないので、潜在的にユーザ入力のための準備ができている。
【００６１】
別の実施形態においては、可視化すべきオブジェクトに関連するウィンドウを、フォーカスを有するウィンドウとして指定するプロパティが設定される。さらに別の実施形態においては、ウィンドウが、確実にユーザ入力のために準備するようにする、「ウィンドウを最上部に移動する（bring window to top）」などのプロシージャが実装される。別の実施形態において、（透明な長方形などの）不可視のエレメントが、選択すべきユーザエレメントの前に存在するかどうかが判定される。存在する場合には、不可視のエレメントは、問題になっているエレメントを選択できるようにするロケーションに再配置される。さらに他の実施形態においては、いくつかのこれらのアプローチが試みられる。
【００６２】
（例示のシステム実施形態）
図９は、ユーザインターフェースオブジェクトを可視化する工程を実装するために使用することができるコンピュータシステム９００の別の例示の実施形態を示している。コンピュータシステム９００は、ユーザインターフェース９１０を有する。コンピュータシステム９００はまた、階層的に構成されたノード９０８である、ユーザインターフェースオブジェクト９０２、９０４、９０６も含む。典型的な構成では、リストボックス中のアイテムなど、可視化すべきユーザインターフェースオブジェクトであるベースユーザインターフェースノード９０２が、親ノード９０４、すなわちリストボックスに関連づけられている。リストボックス９０４は、それ自体、ウィンドウ９０６に関連づけられる。他の多くの構成も可能である。
【００６３】
コンピュータシステム９００は、コンピュータシステム９００上に物理的に配置することができ、またはイントラネットやインターネットなどの通信リンクを介してリモートロケーションに配置しコンピュータシステム９００に接続することができる、自動テスタモジュールをさらに備えている。アクション要求モジュール９１２は、特定のユーザインターフェースエレメントを選択してテストを行う。このモジュールは、自動テスタモジュール９１４の一部分であってもよく、また別のモジュールであってもよい。このアクション要求モジュールは、可視化すべきＵＩノード９０２と同じコンピュータ上に常駐することもでき、また可視化すべきＵＩノード９０２が常駐するコンピューティングシステムと情報をやりとりすることができる別のコンピューティングシステム上に常駐することもできる。
【００６４】
このシステムはまた、ユーザインターフェースノードを仮定するとき、ユーザインターフェースノードを可視化すると考える必要があるその親オブジェクトを決定することができる、階層トラバースモジュール９１６も備えている。例えば、ＵＩノード９０２、すなわちリストボックスエレメントを仮定する場合、階層トラバースモジュールは、親リストボックス９０４と、親リストボックスが属するウィンドウ９０６の所在を見出すことができる。
【００６５】
時には、複雑なエレメントが、所望のエレメントを可視化するためにスクロールも展開も共に必要とすることもある。ブロック９１８は、この展開モジュールを示す。このモジュールを使用して、スクロールが適していない、ツリービューなどのエレメントを展開する。
【００６６】
親内所在モジュール（locate in parent module）９２０も、含まれている。このモジュールは、親オブジェクト内で、子オブジェクトの所在を見出す。例えば、図８を参照すると、このモジュールは、リストボックス「ＨｅｒｂＬｉｓｔ」８０２内で、「Ｍｉｎｔ」８１０とラベル付けされたエレメントの所在を見出すことができる。
【００６７】
ブロック９２２は、祖父母内所在モジュール（locate in grandparent module）９２２を示す。図４Ｇおよび４Ｈを参照すると、このモジュールは、祖父母オブジェクト内で親オブジェクトをスクロールして、子オブジェクトを可視化する。図４Ｇにおいて、子オブジェクト「ＨｅｒｂＬｉｓｔ」４０４Ｇは、親オブジェクト「ＦｏｏｄＬｉｓｔｓ」４０６Ｇ内で可視的であるが、祖父母オブジェクト「ＦｏｏｄＷｉｎｄｏｗ」４０８Ｇ内では見ることができない。図４Ｈにおいて、親オブジェクト「ＦｏｏｄＬｉｓｔｓ」４０６Ｈは、子オブジェクト「ＨｅｒｂＬｉｓｔ」４０４Ｈをスクロールしており、その結果、「ＨｅｒｂＬｉｓｔ」４０４Ｈは、今やウィンドウ「ＦｏｏｄＷｉｎｄｏｗ」４０８Ｈ内で見ることができる。
【００６８】
ウィンドウ準備モジュール９２４も、存在する。このモジュールは、可視化すべきユーザインターフェースオブジェクトに関連するウィンドウが、前述のように、ユーザ入力を受け入れる状態になるようにする。簡単に述べれば、このモジュールは、状態が、ユーザインターフェースエレメントを選択できることが真であるようになっていることを検査する。かかる状態の実施例は、すなわちウィンドウが有効になっていること、ウィンドウが属するスレッドがフォアグラウンドスレッドであること、または可視化すべきユーザインターフェースエレメントをカバーする別のオブジェクトが存在していないことである。
【００６９】
（代替の実施形態）
別の例示の実施形態においては、展開可能エレメントは、トップダウンで展開される。折りたたまれたツリービュー中のエレメントなど一部のエレメントは、この展開の性質（これらが隠された部分である）によって可視的ではない。展開可能ターゲットエレメントが可視的になるようにするために、ターゲット階層は、最上部から最下部へと展開される。すなわち、ターゲットエレメントが階層中においてトラバースされて、最上部エレメントの所在を見出す。次いで、最上部エレメントが展開される。このエレメントがそれ自体、子を有する場合には、このエレメントは展開され、ターゲットエレメントに到達するまで、以下同様に展開され、可視化される。カスケードした（cascading）ダイアログボックス、カスケードしたメニュー、コンボリストボックス、複数選択拡張リストボックスなどのコントロールは、すべて展開を必要とする可能性がある。
【００７０】
別の実施形態において、展開可能ターゲットは、ボトムアップに、すなわち展開可能ターゲットを展開し、次いでその親を展開し、階層における最上部エレメントまで同様に展開することにより、展開される。
【００７１】
別の実施形態において、あるエレメントは、展開およびスクロールの組合せによって可視化される。すなわち、階層は、最上部エレメントまでトラバースされる。ツリーは、逆に下方にトラバースされるので、トラバースルートに沿った各エレメントは、そのタイプに応じて展開またはスクロールされる。
【００７２】
本明細書で説明する実装形態は、スクロール可能エレメントまたは展開可能エレメントを有する所与の任意のＧＵＩについて実装することができるという点で、技術的に不可知である。さらに、この機能は、自動テストプログラムに組み込まれることが予想されるため、この実装形態は、自動テストプログラムのユーザには見えなくなる。したがって、オブジェクトは、さらなる作業を必要とせずに、可視的であり入力する準備ができているものとして現れる。ユーザは、特定のタイプのコントロールについて、可視化メカニズムがどのように動作するかを知る必要がない。例えば、ユーザは、オペレーティングシステムメッセージを送ってある種のＧＵＩエレメントを可視化し、スクロールバーサム（scrollbar thumb）をドラッグして異なるＧＵＩエレメントを可視化する必要はない。
【００７３】
本明細書中で開示した実施形態を含む機能は、拡張可能であるべきである。実際のスクロールおよび展開を実施するデフォルトアクションが、特定のエレメントについて機能しない場合には、すべての基礎となっているプロシージャおよび検証を変更せずに、ユーザはデフォルトアクションを上書きすることができる。例えば、特定の実施例を使用するために、ページアップ／ページダウン（Page Up/Page Down）が、コンテナ１をスクロールするデフォルトアクションであるが、コンテナ２については機能せず、コントロールホイール（Ctrl-Wheel）がコンテナ２をスクロールすることになる場合には、ユーザは、機能のこの部分を再定義することができる。しかし、基本的な決定を行うこれらのプロシージャは、変更されないままであることが好ましい。かかるプロシージャは、スクロールする方向、いつ停止するか、スクロールは正常であったかどうか、などを含む。
【００７４】
（その他の代替）
本発明の原理について説明し示してきたが、かかる原理を逸脱することなく、様々な実施形態を、構成および細部において変更することができることが理解されよう。本明細書中で説明したプログラム、プロセス、または方法は、他に示されない限り、特定のどのようなタイプのコンピューティング環境にも関連づけられず、また限定されないことを理解されたい。例えば、本明細書中で説明した技術は、ユーザが選択することができる任意のユーザインターフェースエレメントに適用することができる。
【００７５】
様々なタイプの汎用コンピューティング環境または専用コンピューティング環境は、本明細書中で説明した教示によるオペレーションと共に使用することができ、あるいはオペレーションを実施することができる。ソフトウェア中に示される実施形態のエレメントは、ハードウェアで実装することもでき、逆もまた同様である。様々なタイプの汎用コンピュータまたは専用コンピュータを使用して、本明細書中に開示したシステムおよび方法を実施することができる。さらに、本明細書中に説明したアクションは、かかるアクションを実施するためのコンピュータ実行可能命令を備えるコンピュータ読取り可能記憶媒体によって実現することもできる。
【００７６】
本発明の原理を適用することができる多数の可能な実施形態を考慮して、詳述された実施形態は、例示的なものにすぎず、本発明の範囲を限定するものとして解釈すべきではないことを理解されたい。もっと正確にいえば、添付の特許請求の範囲の範囲および趣旨の範囲内に含まれるすべての実施形態、およびその等価形態を本発明として請求する。
【図面の簡単な説明】
【００７７】
【図１Ａ】コンピュータシステムのブロック図である。
【図１Ｂ】ユーザインターフェースエレメントが可視的になるようにするための例示の方法を示すフローチャートである。
【図２】図１Ｂに詳細を示す一部の方法の動作を拡張する、ユーザインターフェースエレメントが可視的になるようにするための例示の方法を示すフローチャートである。
【図３】図２に詳細を示す一部の方法の動作を拡張する、ユーザインターフェースエレメントが可視的になるようにするための例示の方法を示すフローチャートである。
【図４Ａ】例示のユーザインターフェースウィンドウを示す図である。
【図４Ｂ】図４Ａのユーザインターフェースウィンドウの階層表現を示す図である。
【図４Ｃ】図４Ｂの階層表現における１つのノードの階層を示す図である。
【図４Ｄ】図３に開示される方法が実装されるときの、図４Ａのユーザインターフェースの中間表現を示す図である。
【図４Ｅ】図３に開示される方法が実装されるときの、図４Ａのユーザインターフェースの別の中間表現を示す図である。
【図４Ｆ】図３に開示される方法が実装されるときの、図４Ａのユーザインターフェースの別の中間表現を示す図である。
【図４Ｇ】図３に開示される方法が実装されるときの、図４Ａのユーザインターフェースの別の中間表現を示す図である。
【図４Ｈ】図３に開示される方法が実装されるときの、図４Ａのユーザインターフェースの最終表現を示す図である。
【図５】図２に詳細を示す一部の方法の動作を拡張する、ユーザインターフェースエレメントが可視的になるようにするための別の例示の方法を示すフローチャートである。
【図６Ａ】図５に開示される方法が実装されるときの、図４Ａのユーザインターフェースの中間表現を示す図である。
【図６Ｂ】図５に開示される方法が実装されるときの、図４Ａのユーザインターフェースの中間表現を示す図である。
【図６Ｃ】図５に開示される方法が実装されるときの、図４Ａのユーザインターフェースの最終表現を示す図である。
【図７】図５に示すプロシージャの一部の態様を拡張する、ユーザインターフェースエレメントが可視的になるようにするための例示の方法のフローチャートである。
【図８】図７の説明を明確にするために使用されるリストボックスを示す図である。
【図９】ユーザインターフェースオブジェクトを可視化する工程を実装するために使用することができるコンピュータシステムのブロック図である。
【図１Ａ】
2006114049.tif 000003
【図１Ｂ】
2006114049.tif 000004
【図２】
2006114049.tif 000005
【図３】
2006114049.tif 000006
【図４Ａ】
2006114049.tif 000007
【図４Ｂ】
2006114049.tif 000008
【図４Ｃ】
2006114049.tif 000009
【図４Ｄ】
2006114049.tif 000010
【図４Ｅ】
2006114049.tif 000011
【図４Ｆ】
2006114049.tif 000012
【図４Ｇ】
2006114049.tif 000013
【図４Ｈ】
2006114049.tif 000014
【図５】
2006114049.tif 000015
【図６Ａ】
2006114049.tif 000016
【図６Ｂ】
2006114049.tif 000017
【図６Ｃ】
2006114049.tif 000018
【図７】
2006114049.tif 000019
【図８】
2006114049.tif 000020
【図９】
2006114049.tif 000021