(57)【要約】  動作検証装置１００は、ウェブページが表示されるクライアント領域と、クライアント領域とは異なる付加領域とを含むブラウザウィンドウについて、画面上でのブラウザウィンドウの表示位置を取得するウィンドウ表示位置取得部６０２と、画面上でのブラウザウィンドウの表示位置と、ブラウザウィンドウにおける付加領域のサイズと、ブラウザウィンドウにおけるステータスバーのサイズとにしたがって、画面上でのクライアント領域の表示位置を特定するクライアント領域特定部６０６と、特定された画面上での表示位置にしたがって、クライアント領域の表示画像をキャプチャする画像取得部６２５とを備える。
2012042560.tif 000002
【特許請求の範囲】
【請求項１】
ウェブページが表示されるクライアント領域と、前記クライアント領域とは異なる付加領域とを含むブラウザウィンドウについて、画面上における前記ブラウザウィンドウの表示位置を取得するウィンドウ位置取得部と、
前記画面上における前記ブラウザウィンドウの表示位置と、前記ブラウザウィンドウの付加領域のサイズと、前記ブラウザウィンドウのステータスバーのサイズとにしたがって、前記画面上における前記クライアント領域の表示位置を特定する画像位置特定部と、
前記画像位置特定部により特定された前記画面上における表示位置にしたがって、前記クライアント領域の表示画像をキャプチャする画像取得部と、
を備えることを特徴とする画像取得装置。
【請求項２】
前記画像取得部は、前記ブラウザウィンドウの付加領域をキャプチャの対象から除外することを特徴とする請求項１に記載の画像取得装置。
【請求項３】
前記画像位置特定部は、
前記ブラウザウィンドウの長さと前記クライアント領域の長さとを取得して、前記ブラウザウィンドウの長さから、前記クライアント領域の長さと、前記ステータスバーのサイズとして予め定められた長さとを減算することにより、前記付加領域の長さを導出する付加領域特定部と、
前記画面上における前記ブラウザウィンドウの表示位置を前記付加領域の長さに応じてシフトした位置を、前記画面上における前記クライアント領域の表示位置として特定するクライアント領域特定部と、
を含むことを特徴とする請求項１または２に記載の画像取得装置。
【請求項４】
前記ブラウザウィンドウにおいて、前記付加領域は前記クライアント領域の上部に配置され、前記ステータスバーは前記クライアント領域の下部に配置されるものであり、
前記ウィンドウ位置取得部は、前記画面上における前記ブラウザウィンドウの表示位置として、直交座標系における前記ブラウザウィンドウの左上座標を取得し、
前記付加領域特定部は、前記付加領域の縦の長さを特定し、
前記クライアント領域特定部は、前記ブラウザウィンドウの左上座標における縦座標値に前記付加領域の縦の長さを加算することにより、前記直交座標系における前記クライアント領域の左上座標を導出することを特徴とする請求項３に記載の画像取得装置。
【請求項５】
前記クライアント領域特定部は、前記ブラウザウィンドウの左上座標における縦座標値に前記付加領域の縦の長さを加算することにより、前記クライアント領域の左上座標における縦座標値を導出する一方、前記ブラウザウィンドウの左上座標における横座標値に、前記ブラウザウィンドウと外部との境界を示す枠線の幅として予め定められた長さを加算することにより、前記クライアント領域の左上座標における横座標値を導出することを特徴とする請求項４に記載の画像取得装置。
【請求項６】
前記クライアント領域には複数のフレームが含まれ、
本装置は、前記複数のフレームのうちキャプチャ対象のフレームについて、前記クライアント領域における前記キャプチャ対象のフレームの位置を取得するフレーム位置取得部をさらに備え、
前記画像位置特定部は、前記画面上における前記クライアント領域の表示位置と、前記クライアント領域における前記キャプチャ対象のフレームの位置とにしたがって、前記画面上における前記キャプチャ対象のフレームの表示位置を特定し、
前記画像取得部は、前記画面上における前記キャプチャ対象のフレームの表示位置にしたがって、前記キャプチャ対象のフレームの表示画像をキャプチャすることを特徴とする請求項１から５のいずれかに記載の画像取得装置。
【請求項７】
画像取得装置により実行される方法であって、
ウェブページが表示されるクライアント領域と、前記クライアント領域とは異なる付加領域とを含むブラウザウィンドウについて、画面上における前記ブラウザウィンドウの表示位置を取得するステップと、
前記画面上における前記ブラウザウィンドウの表示位置と、前記ブラウザウィンドウの付加領域のサイズと、前記ブラウザウィンドウのステータスバーのサイズとにしたがって、前記画面上における前記クライアント領域の表示位置を特定するステップと、
前記特定するステップにおいて特定された前記画面上における表示位置にしたがって、前記クライアント領域の表示画像をキャプチャするステップと、
を備えることを特徴とする画像取得方法。
【請求項８】
画像取得装置に、
ウェブページが表示されるクライアント領域と、前記クライアント領域とは異なる付加領域とを含むブラウザウィンドウについて、画面上における前記ブラウザウィンドウの表示位置を取得する機能と、
前記画面上における前記ブラウザウィンドウの表示位置と、前記ブラウザウィンドウの付加領域のサイズと、前記ブラウザウィンドウのステータスバーのサイズとにしたがって、前記画面上における前記クライアント領域の表示位置を特定する機能と、
前記特定する機能により特定された前記画面上における表示位置にしたがって、前記クライアント領域の表示画像をキャプチャする機能と、
を実現させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、画面に表示されたウェブコンテンツの画像を取得する技術に関する。
【背景技術】
【０００２】
製品品質を保証する上で、製品出荷前の動作テストは不可欠である。一般的には、テスト・エンジニアが製品を手動操作し、その操作結果を確認することにより動作テストを実行することが多い。しかし、操作バリエーションが豊富な多機能製品の場合、手動による動作テストには限界がある。【０００３】
そこで、テスト・プログラムで動作テストを自動実行することにより、動作テストの省力化を図ることも多い。たとえば、ＨＰ（Hewlett-Packard）社が提供する自動機能テストツール「ＱＴＰ（Quick Test Professional）」は、ユーザが自作したテスト・プログラムを実行することにより、動作テストを自動化する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２２７３９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
外部装置に対してウェブコンテンツを提供するウェブサーバや、そのウェブサーバ上で動作するウェブアプリケーションの動作テストにおいては、外部装置に表示されたウェブコンテンツの画像がキャプチャされることがある。そして、そのキャプチャ画像をテスト・エンジニアが確認することにより、動作の正常性を確認することがある。【０００６】
ところで、様々なウェブブラウザを使用して製品の動作テストを行う場合、ウェブブラウザを起動したウィンドウ（以下、「ブラウザウィンドウ」とも呼ぶ。）の表示形式は、ウェブブラウザごとに異なる。そのため、異なるウェブブラウザに同じウェブコンテンツを表示させた場合、ブラウザウィンドウ全体としての見た目が異なることがあり、動作テストの効率を低下させることがあると本発明者は考えた。【０００７】
本発明は、本発明者の上記課題認識に基づいて完成された発明であり、その主たる目的は、動作テストにおいて利便性の高いウェブコンテンツの表示画像を取得するための技術を提供することである。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明のある態様の画像取得装置は、ウェブページが表示されるクライアント領域と、クライアント領域とは異なる付加領域とを含むブラウザウィンドウについて、画面上におけるブラウザウィンドウの表示位置を取得するウィンドウ位置取得部と、画面上におけるブラウザウィンドウの表示位置と、ブラウザウィンドウの付加領域のサイズと、ブラウザウィンドウのステータスバーのサイズとにしたがって、画面上におけるクライアント領域の表示位置を特定する画像位置特定部と、画像位置特定部により特定された画面上における表示位置にしたがって、クライアント領域の表示画像をキャプチャする画像取得部と、を備える。【０００９】
本発明の別の態様は、画像取得方法である。この方法は、画像取得装置により実行される方法であって、ウェブページが表示されるクライアント領域と、クライアント領域とは異なる付加領域とを含むブラウザウィンドウについて、画面上におけるブラウザウィンドウの表示位置を取得するステップと、画面上におけるブラウザウィンドウの表示位置と、ブラウザウィンドウの付加領域のサイズと、ブラウザウィンドウのステータスバーのサイズとにしたがって、画面上におけるクライアント領域の表示位置を特定するステップと、特定するステップにおいて特定された画面上における表示位置にしたがって、クライアント領域の表示画像をキャプチャするステップと、を備える。【００１０】
なお、以上の構成要素の任意の組合せ、本発明の表現を装置、方法、システム、プログラム、プログラムを格納した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１１】
本発明によれば、動作テストにおいて利便性の高いウェブコンテンツの表示画像を取得することができる。
【図面の簡単な説明】
【００１２】
【図１（ａ）】ポータルサイト第１画面の画面図である。
【図１（ｂ）】ポータルサイト第２画面の画面図である。
【図２】辞書テストを実行したときのログを示す図である。
【図３】辞書テストを実行するためのプログラムを示す図である。
【図４】動作検証装置の機能ブロック図である。
【図５】ログを取得して動作テストを実行するまでの概要図である。
【図６】ログ画面の画面図である。
【図７】関数設定画面の画面図である。
【図８】プログラム画面の画面図である。
【図９】入力設定画面の画面図である。
【図１０】ケース設定画面の画面図である。
【図１１】参考技術１の動作検証装置と参考技術２の動作検証装置とのそれぞれにおける構成の概要を示す図である。
【図１２】参考技術１の動作検証装置と参考技術２の動作検証装置とのそれぞれにおける動作の概要を示す図である。
【図１３】参考技術２の動作検証装置の機能構成を示すブロック図である。
【図１４】参考技術２において、ユーザのデータ入力操作を検出して動作テストを実行するまでの概要図である。
【図１５】参考技術２における関数設定画面の画面図である。
【図１６】参考技術２における関数設定画面の画面図である。
【図１７】参考技術２における入力設定画面の画面図である。
【図１８】参考技術２におけるケース設定画面の画面図である。
【図１９】ウェブブラウザに対する２つの操作方式の特徴を示す図である。
【図２０】ウェブブラウザに対する２つの操作方式について機能間の呼び出し関係を模式的に示す図である。
【図２１】参考技術３の動作検証装置の機能構成を示すブロック図である。
【図２２】図２１のプログラム実行部の詳細を示すブロック図である。
【図２３】参考技術３の動作検証装置の動作を示すフローチャートである。
【図２４】ウェブページの動作テストにおける機能間の呼び出し関係を模式的に示す図である。
【図２５】セレニウムウィンドウマネージャに格納されるデータ例を示す図である。
【図２６】図２４のＦＦダイアログに対する操作の仕組みを示す図である。
【図２７】図２４のＳａｆａｒｉダイアログに対する操作の仕組みを示す図である。
【図２８】参考技術４の動作検証装置の機能構成を示すブロック図である。
【図２９】図２８のプログラム実行部の詳細を示すブロック図である。
【図３０】参考技術４の動作検証装置の動作を示すフローチャートである。
【図３１】図３０のＳ４０２のテストプログラム読込処理を詳細に示すフローチャートである。
【図３２】図３０のＳ４１９のウェブブラウザ起動処理を詳細に示すフローチャートである。
【図３３】図３０のＳ４２６のウェブページ操作処理を詳細に示すフローチャートである。
【図３４】図３３のＳ４５２のＭａｃ用操作処理を詳細に示すフローチャートである。
【図３５】図３３のＳ４５８のＩＥ用操作処理を詳細に示すフローチャートである。
【図３６】図３３のＳ４６２のＦＦ用操作処理を詳細に示すフローチャートである。
【図３７】ブラウザウィンドウにおけるウェブコンテンツの表示例を示す図である。
【図３８】図３７のブラウザウィンドウのキャプチャ画像を示す図である。
【図３９】第１実施形態における画面キャプチャ処理に関する機能構成を示すブロック図である。
【図４０】プロキシ処理部が証左物設定部に提供する関数を示す図である。
【図４１】動作検証装置における画像キャプチャ処理の動作を示すフローチャートである。
【図４２】図４１のＳ６０６のフレーム表示位置特定処理を詳細に示すフローチャートである。
【図４３】ブラウザウィンドウにおけるウェブコンテンツの表示例を示す図である。
【発明を実施するための形態】
【００１３】
本実施の形態の動作検証装置について説明する前に、その前提となる構成について、参考技術１、参考技術２、参考技術３、および参考技術４により説明する。
【００１４】
（参考技術１）
図１（ａ）は、ポータルサイト第１画面３００の画面図である。
参考技術１においては、ポータル・サイト「ＸＹＺ！」を対象とした動作テストについて説明する。ポータルサイト第１画面３００は、エディットボックス３０２と検索リンク３０４を含む。検索リンク３０４は、「ウェブ」、「ブログ」、「画像」、「辞書」という４つのリンクを含む。ユーザがエディットボックス３０２に文字列を入力し、検索リンク３０４のうちのいずれかをマウス・クリックすると、入力文字列の検索が開始される。たとえば、エディットボックス３０２に文字列「液晶」と入力し、リンク「ウェブ」をマウス・クリックした場合、文字列「液晶」を含むウェブサイトが検索対象となる。エディットボックス３０２に文字列「液晶」と入力し、リンク「ブログ」をマウス・クリックした場合には、このポータル・サイトに開設されているブログ（Weblog）のうち、文字列「液晶」を含むブログページが検索対象となる。
ここでは、エディットボックス３０２に文字列「テスト」が入力され、リンク「辞書」がマウス・クリックされたとする。
【００１５】
図１（ｂ）は、ポータルサイト第２画面３１０の画面図である。
ポータルサイト第１画面３００にて、「テスト」を入力し、「辞書」をマウス・クリックすると、図１（ｂ）に示すポータルサイト第２画面３１０が表示される。検索結果欄３０６には、このポータル・サイトが提供している「辞書」サービスにより、文字列「テスト」に関連する項目が羅列される。
ここで、検索結果欄３０６の１番上にあるリンク「テスト（test）」がマウス・クリックされたとする。
【００１６】
上記過程においては、以下に示す３つの操作がなされている。
Ａ１．ポータルサイト第１画面３００のエディットボックス３０２に文字列「テスト」を入力する操作。
Ａ２．ポータルサイト第１画面３００の検索リンク３０４のうち、リンク「辞書」をマウス・クリックする操作。
Ａ３．ポータルサイト第２画面３１０の検索結果欄３０６のうち、リンク「テスト（test）」をマウス・クリックする操作。
以下においては、上記Ａ１〜Ａ３の操作により実現される動作過程のことを、「辞書テスト」とよぶ。
【００１７】
図２は、辞書テストを実行したときのログ３２０を示す図である。
ＨＰ社のＱＴＰが導入されているクライアント端末を操作して、上記ポータル・サイトにアクセスし、Ａ１〜Ａ３の操作を実行した場合、ＱＴＰは図２に示すログ３２０を生成する。ログ３２０には、操作Ａ１〜Ａ３が所定フォーマットの符合文として記録される。
たとえば、操作Ａ１は、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テスト"
という符号文にて表現される。これは、"XYZ!"というウェブ・サイト、"XYZ!"という名前のウェブページ、pという名前のエディットボックス（図１（ａ）、図１（ｂ）に示すエディットボックス３０２に相当する）に対して、文字列「テスト」が入力されたことを意味している。
同様にして、操作Ａ２は、
Browser("XYZ!").Page("XYZ!").Link("辞書").Click
操作Ａ３は、
Browser("XYZ!").Page("XYZ!-すべての辞書-テスト").Link("テスト(test)").Click
という符号文にて表示される。参考技術１においては、ＱＴＰの文法に基づいて説明するが、符合文のフォーマットはこれに限られるものではない。
【００１８】
ＱＴＰは、ログ３２０の符合文を解釈しながら、符合文により表現される操作を再現実行できる。このため、いったんログ３２０を生成すれば、同一内容の辞書テストを何度でも繰り返し実行できる。また、ログ３２０の一部を書き換えれば、手動操作時とは異なる内容にて辞書テストを実行できる。たとえば、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テスト"
に含まれる文字列「テスト」を別の文字列「テイスト」に変更し、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テイスト"
と書き換えてＱＴＰに入力すれば、エディットボックス３０２への入力文字列だけ変更した同内容の辞書テストを自動実行できる。
しかし、ログ３２０を書き換えながら動作テストを実行するには、ログ３２０の文法に関してある程度の知識が必要である。また、ログ３２０の書き換えに際し、人為的なミスが発生する可能性がある。
【００１９】
図３は、辞書テストを実行するためのプログラム３３０を示す図である。
ログ３２０により動作テストを実行する代わりに、ログ３２０と同等の内容をＶＢ（Visual Basic）スクリプト等で記述することにより、テスト・プログラムを作成してもよい。図３に示すプログラム３３０は、図２のログ３２０を参照しつつ作成されたテスト・プログラムである。
たとえば、操作Ａ１は、
WebEditSet(Browser("XYZ!").Page("XYZ!").WebEdit("p"),DataTable("p1,dtGlobalSheet")
というＶＢ関数により表現される。WebEditSet関数の具体的なロジックは、同図中段に記述されている通りである。
【００２０】
プログラム３３０、文字列「テスト」のような入力データをプログラム３３０中に含まない点においてログ３２０と異なる。代わりに、WebEditSet関数は、dtGlobalSheetとして表現されるファイル（以下、「入力データファイル」とよぶ）から入力データを受け取る。すなわち、ロジックと入力データが分離されることになる。入力データファイルの書き換えや取り替えにより、さまざまな入力データに基づいて同一ロジックの辞書テストを実行できる。手動による動作テストやログ３２０による動作テストに比べて、プログラム３３０による動作テストは、入力データのバリエーションを増やしやすいというメリットがある。
【００２１】
ただし、プログラム３３０による動作テストには、以下の問題点がある。
ｄ１．プログラムを作成する手間が新たに発生する。
ｄ２．プログラム作成者によって、プログラムの内容が変化する。たとえば、プログラマＰ１が操作Ａ１に対応して作成するWebEditSet関数と、プログラマＰ２が操作Ａ１に対応して作成するWebEditSet関数は、関数名は同じでもロジックが同一になるとは限らない。また、プログラム自体にバグが混入する可能性がある。このため、プログラム３３０自体の信頼性を担保するための取り組みが必要となる。また、プログラム３３０には、例外処理等、動作テストとは直接関係しないロジックも必要であるが、全てのプログラマが例外処理まで考慮したロジックを実装するとは限らない。たとえば、図３に示すWebEditSet関数の場合、入力データが空文字の場合にも対応できるようにロジックが組まれているが、別のプログラマがWebEditSet関数を実装する場合には、こういった配慮が欠如するかもしれない。
結果として、プログラマのスキルが動作テストの内容・結果に影響を及ぼしやすくなってしまう。
【００２２】
図４は、動作検証装置１００の機能ブロック図である。
本明細書のブロック図が示す各機能ブロックは、ハードウェア的には、コンピュータのＣＰＵをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組み合わせによっていろいろなかたちで実現できることは、当業者には理解されるところである。例えば、各機能ブロックは、コンピュータプログラムとして記録媒体に格納され、情報処理装置のハードディスクにインストールされ、適宜メインメモリに読み出されてプロセッサにより実行されてもよい。
動作検証装置１００は、専用ハードウェアとして形成されてもよいし、ウェブブラウザなどのユーザインタフェースと連携するソフトウェア・モジュールとして形成されてもよい。
参考技術１の動作検証装置１００とは、ＱＴＰのアドオンとして形成されるソフトウェア・モジュールであるとして説明する。
【００２３】
動作検証装置１００は、ＩＦ（インタフェース）部１１０、データ処理部１３０およびデータ保持部１４０を含む。
ＩＦ部１１０は、ユーザやＱＴＰとのインタフェースを担当する。データ処理部１３０は、ＩＦ部１１０やデータ保持部１４０から取得されたデータを元にして各種のデータ処理を実行する。データ処理部１３０は、ＩＦ部１１０とデータ保持部１４０との間のインタフェースの役割も果たす。データ保持部１４０は、各種データを保持するための記憶領域である。
【００２４】
ＩＦ部１１０：
ＩＦ部１１０は、入力部１１２と出力部１１８を含む。入力部１１２はユーザやＱＴＰからの入力処理を担当し、出力部１１８はユーザやＱＴＰに対する出力処理を担当する。入力部１１２は、ログ取得部１１４と入力データ取得部１１６を含む。ログ取得部１１４は、ＱＴＰからログを取得する。入力データ取得部１１６は、入力データファイルを取得し、入力データファイルからプログラムに提供する入力データを取得する。入力データファイルの詳細については、図５や図９に関連して詳述する。
【００２５】
出力部１１８は、関数設定画面表示部１２０、入力設定画面表示部１２２、プログラム画面表示部１２４およびケース設定画面表示部１２６を含む。関数設定画面表示部１２０は、図７に示す関数設定画面２１０を表示させる。入力設定画面表示部１２２は、図９に示す入力設定画面２３０を表示させる。プログラム画面表示部１２４は、図８に示すプログラム画面２２０を表示させる。ケース設定画面表示部１２６は、図１０に示すケース設定画面２４０を表示させる。
【００２６】
データ処理部１３０：
データ処理部１３０は、プログラム生成部１３２、プログラム実行部１３４およびテストケース登録部１３６を含む。プログラム生成部１３２は、動作テスト用のプログラムを自動的に生成する。プログラム実行部１３４は、生成されたプログラムを実行させる。参考技術１においては、ＱＴＰにプログラムを実行させる。テストケース登録部１３６は、実行セットをケースファイルに登録する。実行セットおよびケースファイルについては図１０に関連して詳述する。
【００２７】
データ保持部１４０：
データ保持部１４０は、ログ保持部１４２、プログラム保持部１４４、入力データファイル保持部１４６、ケースファイル保持部１４８、関数保持部１５０および結果保持部１５２を含む。ログ保持部１４２は、ログを保持する。プログラム保持部１４４は、プログラムを保持する。入力データファイル保持部１４６は、入力データファイルを保持する。ケースファイル保持部１４８は、ケースファイルを保持する。関数保持部１５０は、動作テスト用のプログラムに登録される関数について、関数ライブラリを保持する。結果保持部１５２は、動作テストの結果を保持する。
【００２８】
図５は、参考技術１において、ログを取得して動作テストを実行するまでの概要図である。
まず、動作テストの対象となる機器を手動操作する。参考技術１においては、クライアント端末のウェブブラウザを操作して、ポータル・サイト「ＸＹＺ！」にアクセスする。ＱＴＰはログを生成し、ログ取得部１１４はＱＴＰからログを取得する。各種符合文にはあらかじめ関数が対応づけられている。関数設定画面表示部１２０は、関数保持部１５０の関数ライブラリを読み出し、ログに含まれる各符号文に対応する関数を一覧表示させる（Ｓ１）。関数設定画面表示部１２０において、ユーザは、適宜、関数を追加・変更・削除できる。こうして、プログラムに含まれるべき関数が特定される。Ｓ１については、図７に関連して後に詳述する。
【００２９】
次に、このプログラムに供給すべき入力データを設定する（Ｓ２）。設定内容は、入力データファイルとして登録される。Ｓ２については、図９に関連して後に詳述する。Ｓ１で設定された関数群からプログラムを自動生成する（Ｓ３）。Ｓ３については、図８に関連して後に詳述する。
【００３０】
次に、複数種類のプログラムおよび複数種類の入力データファイルから、プログラムと入力データファイルの組合せを「実行セット」として登録する。実行セットは複数個登録することもできる（Ｓ４）。設定内容は、ケースファイルとして登録される。たとえば、プログラムＰ１を入力データファイルＦ２に基づいて実行したあと、プログラムＰ２を入力データファイルＦ６に基づいて実行させたい場合、
実行セット１：プログラムＰ１＋入力データファイルＦ２
実行セット２：プログラムＰ２＋入力データファイルＦ６
としてケースファイルに登録される。Ｓ４については、図１０に関連して詳述する。
最後に、ケースファイルにしたがって、プログラムを実行する（Ｓ５）。上記例の場合には、プログラム実行部１３４は、実行セット１と実行セット２を連続実行させる。プログラム実行部１３４は、プログラムの実行結果、いいかえれば、テスト結果を結果保持部１５２に登録する。
【００３１】
図６は、ログ画面２００の画面図である。
ログ取得部１１４がログを取得すると、出力部１１８はログ画面２００におけるログ表示領域２０２にログを画面表示させる。ユーザは、ＱＴＰのログをログ表示領域２０２にコピー＆ペーストしてもよい。あるいは、出力部１１８は、ログ画面２００の表示時において、ＱＴＰが生成したログ（ファイル）を取得し、ログ表示領域２０２に画面表示させてもよい。ユーザが実行ボタン２０４をマウス・クリックすると、次の図７に示す関数設定画面２１０が表示される。
【００３２】
図７は、関数設定画面２１０の画面図である。
プログラム生成部１３２は、ログに含まれる符号文について関数を特定し、関数設定画面２１０の関数欄２１４に特定した関数を一覧表示させる。番号欄２１２は実行順序、説明欄２１６は関数の概要説明、オブジェクト欄２１８は操作対象オブジェクト、パラメータ欄２１９はパラメータ名、入力値欄２１７は入力データを示す。
先述の操作Ａ１を示す符合文、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テスト"
には、あらかじめ、WebEditSet関数が関数ライブラリにおいて対応づけられている。プログラム生成部１３２はログ３２０の１番目の符合文を読み出すと、関数保持部１５０の関数ライブラリを参照し、WebEditSet関数を特定する。操作Ａ１が操作対象とするオブジェクトは、「Browser("XYZ!").Page("XYZ!")」のページであるため、オブジェクト欄２１８には、「Browser("XYZ!").Page("XYZ!")」が設定される。WebEditSet関数は、エディットボックスp（エディットボックス３０２）に設定される入力データを引数とする関数である。入力値欄２１７において、エディットボックスpに設定すべき入力データを設定することもできるが、関数設定画面２１０では入力データを登録しないものとして説明する。エディットボックスpに設定すべき入力データは、図９に関連して詳述する入力設定画面２３０にて設定される。
【００３３】
ログ３２０には操作Ａ１〜Ａ３に対応して３つの符合文が含まれているため、プログラム生成部１３２は３つの関数を特定する。ユーザは、関数設定画面２１０にて、関数を追加・削除・変更してもよい。図７における４番目のTextCheck関数と５番目のWebScreenCapture関数は、ユーザが追加選択した関数である。
【００３４】
TextCheck関数は、表示中のウェブページにおいて、変数qに代入される文字列が含まれているかを判定する関数である。WebScreenCapture関数は、表示中のウェブページを画面キャプチャする関数である。動作テストの結果を証跡管理する上で、WebScreenCapture関数は便利な関数である。このように、関数ライブラリには、WebEditSet関数のようにユーザの操作に対応した関数だけでなく、TestCheck関数のように動作テストを補助・支援するための関数も用意されている。ユーザは、関数ライブラリから所望の関数を選択するだけで、動作テストに含めたいロジックを設定できる。
【００３５】
テストケース設定ボタン２１５がクリックされると、図１０のケース設定画面２４０が表示される。入力データファイル作成ボタン２１３がクリックされると、図９の入力設定画面２３０が表示される。プログラム作成ボタン２１１がクリックされると、図８のプログラム画面２２０が表示される。
【００３６】
参考技術１の動作検証装置１００には、以下のメリットがある。
ｍ１．ＧＵＩ（Graphical User Interface）ベースで関数を選択するだけで、プログラムに含めたいロジックを選択できる。プログラムを作成するための手間がほとんどかからない。
ｍ２．プログラムに含まれる関数は、関数ライブラリとして登録済みの関数であるため、作成者によってプログラムの品質がばらつきにくい。例外処理等の必要なロジックも、あらかじめ各関数に組み込まれている。
【００３７】
図８は、プログラム画面２２０の画面図である。
関数設定画面２１０において、プログラム作成ボタン２１１がマウス・クリックされると、プログラム生成部１３２がプログラムを生成し、プログラム画面表示部１２４はプログラム画面２２０におけるプログラム表示領域２２２にそのソースコードを表示させる。プログラムは、プログラム保持部１４４に保持される。
【００３８】
図９は、入力設定画面２３０の画面図である。
関数設定画面２１０において、入力データファイル作成ボタン２１３がマウス・クリックされると、入力設定画面表示部１２２は入力設定画面２３０を表示させる。関数設定画面２１０においては、パラメータpとqが定義されている。番号欄２３２は入力順序、変数欄２３４はパラメータpへの入力データ、変数欄２３６はパラメータqへの入力データを示す。入力設定画面２３０では、このパラメータpとqに代入する入力データを設定する。各入力データは、入力データファイルとして入力データファイル保持部１４６に保持される。
【００３９】
たとえば、プログラム３３０に、図９に示す形式の入力データファイルを与えると、
１．文字列「テスト」をエディットボックス３０２に入力して辞書を検索し、実行結果を示す画面に文字列「試験」が含まれているかを判定するテスト
２．文字列「test」をエディットボックス３０２に入力して辞書を検索し、実行結果を示す画面に文字列「試験」が含まれているかを判定するテスト
３．文字列「テストケース」をエディットボックス３０２に入力して辞書を検索し、実行結果を示す画面に文字列「試験」が含まれているかを判定するテスト
・・・のように、異なる入力データに基づく複数の辞書テストを連続実行できる。
【００４０】
図１０は、ケース設定画面２４０の画面図である。
関数設定画面２１０において、テストケース設定ボタン２１５がマウス・クリックされると、ケース設定画面表示部１２６はケース設定画面２４０を表示させる。番号欄２４４は実行順序、実行セット欄２４５は実行セットの概要、プログラム欄２４６は実行対象となるプログラム、入力データファイル欄２４７は入力データの抽出対象となる入力データファイルを示す。
ここでは、インターネット証券のウェブ・サイトを動作テストの対象として説明する。
【００４１】
同図においては、１．ログイン、２．ニュースチェック、３．株売り、４．債券売り、５．住所変更、６．ログアウトという６つの実行セットが登録されている。まず、ＱＴＰは、プログラム「login.vbs」から「login」プロジェクトを生成する。ここでいう「プロジェクト」とは、ＱＴＰの実行形式ファイル群を含むディレクトリである。ＱＴＰは「login」プロジェクトを入力として、login.vbsとlogin.xlsに定義された処理を実行する。ユーザが実行ボタン２４８をマウス・クリックすると、最初に、実行セット「ログイン」の「login」プロジェクトが実行される。１番目の実行セット「ログイン」が完了すると、実行セット「ニュースチェック」として、「ncheck」プロジェクトが実行される。
【００４２】
このように、実行ボタン２４８がマウス・クリックされると、１．ログイン、２．ニュースチェック、３．株売り、４．債券売り、５．住所変更、６．ログアウトという６つの実行セットが連続実行される。これにより、「ログインして、ニュースをチェックした後、手持ち株と手持ち債券の売りを指示し、住所変更をした上で、ログアウトする」というテスト・シナリオに基づく動作テストを自動化できる。
【００４３】
ユーザは、ケース設定画面２４０において自由にテスト・シナリオを作ることができる。たとえば、実行セット「株売り」の代わりに実行セット「株買い」を登録してもよいし、実行セット「株売り」の入力データファイルとして「stock1.xls」ではなく別の入力データファイルを登録してもよい。ケース設定画面２４０において登録されたテスト・シナリオはケースファイルとして記録され、ケースファイル保持部１４８に保持される。
テスト・シナリオの構成や入力データファイル等を少しずつ変化させることにより、動作テストのバリエーションを広げやすくなる。
【００４４】
以上、参考技術１の動作検証装置１００を説明した。
動作検証装置１００によれば、プログラムと入力データ、すなわち、処理とパラメータを分離できる。そして、そのためのプログラムをＧＵＩベースの設定に基づき自動生成できる。これにより、プログラムに含めるロジックの多様性を確保しつつも、安定した品質のプログラムを簡易に生成できる。また、入力データファイルの内容を変更するだけで、動作テストの内容を変更できるため、動作テストのバリエーションを広げやすくなる。
【００４５】
更に、実行セットをケースファイルに登録してテスト・シナリオを作ることにより、既存のプログラムを組合せながら、さまざまな状況における動作テストを実現できる。また、WebEditSet関数のようなテスト対象機器を操作するための関数だけでなく、WebScreenCapture関数のような動作テストを支援するための関数を用意しておくことにより、動作テストの効率や信頼性をいっそう向上させやすくなる。
【００４６】
（参考技術２）
参考技術２では、上記の参考技術１を改良した動作検証装置１００を提案する。
まず、参考技術１における動作検証装置１００と、参考技術２の動作検証装置１００とを比較しつつ、参考技術２の動作検証装置１００についてその概要を説明する。
【００４７】
図１１は、参考技術１の動作検証装置１００と参考技術２の動作検証装置１００とのそれぞれにおける構成の概要を示す。図１１（ａ）が示すように、参考技術１の動作検証装置１００は、動作テストの実行エンジンであるＱＴＰモジュール１０２と、ＱＴＰモジュール１０２を使用したウェブサーバ４００の動作テストを効率化するためのラッパーモジュール１０４とを備えた。このラッパーモジュール１０４には、図４で示した各機能ブロックが含まれる。
【００４８】
図１１（ａ）において、ユーザは、ＱＴＰモジュール１０２を介して、動作確認の対象装置であるウェブサーバ４００を操作する（Ｓ１００）。ラッパーモジュール１０４は、その操作内容が記録されたログをＱＴＰモジュール１０２から取得して、関数設定画面２１０をユーザに提供した（Ｓ１０２）。ユーザは、動作テスト実行の際、ＱＴＰモジュールが読み込み可能な動作テスト用プログラムをラッパーモジュール１０４において生成させ、ＱＴＰモジュール１０２にそのプログラムを実行させた（Ｓ１０４）。
【００４９】
これに対して、図１１（ｂ）が示すように、参考技術２の動作検証装置１００は、動作テストの実行エンジンの機能とラッパーモジュール１０４の機能とが統合された統合検証モジュール１０６を備える。ユーザが統合検証モジュール１０６を介してウェブサーバ４００を操作すると（Ｓ２００）、統合検証モジュール１０６はその操作内容を逐次検出して関数設定画面２１０のデータを設定し、関数設定画面２１０をユーザに提供する（Ｓ２０２）。ユーザは、動作テスト実行の際、統合検証モジュール１０６において動作テスト用プログラムを生成させて実行させる（Ｓ２０４）。
【００５０】
図１２は、参考技術１の動作検証装置１００と参考技術２の動作検証装置１００とのそれぞれにおける動作の概要を示す。図１２（ａ）は、参考技術１の動作検証装置１００における動作の概要を示している。ユーザはウェブサーバ４００に対するデータ入力操作を実行し（Ｓ１１０）、ＱＴＰモジュール１０２はその操作内容が記録されたログを出力する（Ｓ１１２）。ユーザはそのログのデータをＱＴＰモジュール１０２の所定の入力エリアにコピーする（Ｓ１１４）。ラッパーモジュール１０４は所定の入力エリアに設定されたログのデータに基づいて関数設定画面を設定して表示させ（Ｓ１１６）、ユーザはその関数設定画面を介して追加・変更すべき関数・入力データを設定する（Ｓ１１８）。
【００５１】
ラッパーモジュール１０４は、関数設定画面のデータに基づいて、動作テストのためのＱＴＰ用プログラムを生成する（Ｓ１２０）。ユーザは、ＱＴＰ用プログラムをＱＴＰモジュール１０２の所定の入力エリアにコピーする（Ｓ１２２）。ユーザは、ケース設定画面において、ＱＴＰ用プログラムと入力データファイルとをセットとして指定した動作テストのシナリオを設定する（Ｓ１２４）。ラッパーモジュール１０４は、そのシナリオに基づいて、ＱＴＰ用プログラムと入力データファイルのセットをＱＴＰモジュール１０２に渡して、セット毎に動作テストを実行させる（Ｓ１２６）。
【００５２】
図１２（ｂ）は、参考技術２の動作検証装置１００における動作の概要を示している。ユーザは、ウェブサーバ４００に対するデータ入力操作を実行する（Ｓ２１０）。統合検証モジュール１０６は、そのデータ入力操作を逐次検出して、データ入力操作に対応する関数を操作内容ファイルに記録し、その操作内容ファイルの記録データを関数設定画面において表示する（Ｓ２１２）。ユーザは、その関数設定画面を介して追加・変更すべき関数・入力データを操作内容ファイルに設定する（Ｓ２１４）。そしてユーザは、ケース設定画面において、操作内容ファイルと入力データファイルとをセットとして指定した動作テストのシナリオを設定する（Ｓ２１６）。統合検証モジュール１０６は、そのシナリオに基づいて、シナリオ内の１以上のセットを集約した動作テスト用プログラムを生成して実行する（Ｓ２１８）。
【００５３】
このように、参考技術１の動作検証装置１００では、ＱＴＰモジュール１０２とラッパーモジュール１０４とが分離していた。したがって、両モジュールを連係させるために、ユーザ自身が仲介作業を実行する必要があった。また、ラッパーモジュール１０４はシナリオ内のセット毎にＱＴＰモジュール１０２をコールして、テスト用プログラムをセット毎に実行させる必要があった。
【００５４】
これに対して、参考技術２の動作検証装置１００では、動作テストの実行エンジンと、その効率的な利用を実現するラッパーとが分離されることなく、シームレスに統合されている。したがって、参考技術１の動作検証装置１００と比較すると、分離したモジュールを連係させるために必要であったユーザの作業が不要になり、動作テストのためのユーザの作業量が低減する。また、シナリオ内の複数のセットが集約された動作テスト用プログラムが生成され、そのプログラムの実行により一連のシナリオが実行されるため、迅速な動作テストが実現される。
【００５５】
図１３は、参考技術２の動作検証装置１００の機能構成を示すブロック図である。同図の機能ブロックは、図１１（ｂ）で示した統合検証モジュール１０６に含まれる。参考技術２の機能ブロックのうち、参考技術１の機能ブロックに対応する機能ブロックには、同じ符号を付している。参考技術１の機能ブロックと同じ符号を付した機能ブロックについてはその機能が参考技術１に既述した内容と異なる場合に記載しており、同様の機能についてはその記載を省略する。
【００５６】
データ保持部１４０は、操作内容ファイル保持部１４３と、プログラム保持部１４４と、入力データファイル保持部１４６と、ケースファイル保持部１４８と、関数保持部１５０とを有する。操作内容ファイル保持部１４３は、動作テスト用プログラムに設定すべき関数が記録される操作内容ファイルを記憶する。プログラム保持部１４４は、操作内容ファイルにしたがって生成された動作テスト用プログラムを記憶する。
【００５７】
ＩＦ部１１０の入力部１１２は、操作検出部１１５とユーザ設定受付部１１７とを有する。操作検出部１１５は、ウェブサーバ４００に対するユーザのデータ入力操作を逐次検出する。ユーザ設定受付部１１７は、関数設定画面２１０、入力設定画面２３０、ケース設定画面２４０に対するユーザによる設定情報を検出する。
【００５８】
ＩＦ部１１０の出力部１１８は、関数設定画面表示部１２０と入力設定画面表示部１２２とケース設定画面表示部１２６とを有する。関数設定画面表示部１２０は、操作内容ファイル保持部１４３に記録された操作内容ファイルの内容を表示する関数設定画面２１０を所定の表示装置に表示させる。
【００５９】
データ処理部１３０は、プログラム生成部１３２と、プログラム実行部１３４と、テストケース登録部１３６と、操作記録部１３７と、入力データ記録部１３８とを有する。操作記録部１３７は、関数保持部１５０を参照して、操作検出部１１５において検出されたデータ入力操作に対応する関数を特定し、その関数を操作内容ファイルに記録する。また操作記録部１３７は、関数設定画面２１０に対するユーザの設定情報を操作内容ファイルに記録する。入力データ記録部１３８は、入力設定画面２３０を介してユーザが入力した入力データを入力データファイルに記録する。プログラム生成部１３２は、操作内容ファイルに記録された関数に応じて動作テスト用プログラムを生成する。プログラム実行部１３４は、動作テストの実行エンジンとして、動作テスト用プログラムを実行し、その結果を結果保持部１５２に記録する。
【００６０】
図１４は、参考技術２において、ユーザのデータ入力操作を検出して動作テストを実行するまでの概要図である。まず、ユーザはクライアント端末のウェブブラウザを操作してウェブサーバ４００にアクセスし、ウェブサーバ４００に対する各種操作、典型的にはウェブサーバ４００が提供するウェブページに対するデータ入力操作を実行する。操作検出部１１５はユーザによるデータ入力操作を逐次検出し、操作記録部１３７は関数保持部１５０の関数ライブラリを読み出し、そのデータ入力操作に対応する関数を操作内容ファイルに逐次記録する（Ｓ２２０）。
【００６１】
次に、関数設定画面表示部１２０は、操作内容ファイル保持部１４３の操作内容ファイルを読み出し、ユーザによる操作に対応する関数を一覧表示する関数設定画面を表示させる。関数設定画面において、ユーザは、適宜、関数を追加・変更・削除でき、また、動作テスト用プログラムに静的に設定すべき入力データを設定できる。こうして、動作テスト用プログラムに含まれるべき関数が特定される。関数設定画面については、図１５および図１６に関連して後述する。
【００６２】
次に、入力設定画面表示部１２２は、入力設定画面２３０を表示させる。ユーザは、入力設定画面２３０を介して、動作テストの実行時に動作テスト用プログラムに対して動的に供給されるべき入力データを設定する。ユーザにより設定された入力データは、入力データファイルに記録される（Ｓ２２２）。入力設定画面２３０については、図１７に関連して後述する。
【００６３】
次に、ケース設定画面表示部１２６は、ケース設定画面２４０を表示させる。ユーザは、複数種類の操作内容ファイルおよび複数種類の入力データファイルから、操作内容ファイルと入力データファイルとの組み合わせを実行セットとして登録する。テストケース登録部１３６は、１以上の実行セットをケースファイルに記録する（Ｓ２２４）。例えば、テストケース１において、操作内容ファイルＦ０１の設定内容を入力データファイルＦ１２に基づいて実行させた後、操作内容ファイルＦ０２の設定内容を入力データファイルＦ１６に基づいて実行させる場合、
テストケース１：
実行セット１：操作内容ファイルＦ０１＋入力データファイルＦ１２
実行セット２：操作内容ファイルＦ０２＋入力データファイルＦ１６
としてケースファイルに登録される。ケース設定画面２４０については、図１８に関連して後述する。
【００６４】
次に、プログラム生成部１３２は、ケースファイルおよび操作内容ファイルに基づいて動作テスト用プログラムを生成する（Ｓ２２６）。具体的には、実行セットに設定された操作内容ファイルに順次記録された関数を、動作テスト用プログラムのプログラムコードに順次設定してもよい。また、プログラム生成部１３２は、１つのテストケースに複数の実行セットが設定されている場合、各実行セットの操作内容ファイルに記録された関数を１つの動作テスト用プログラムに集約して設定する。
【００６５】
また、プログラム生成部１３２は、操作内容ファイルの関数に対して入力データそのものが設定されていた場合には、その入力データを動作テスト用プログラムに静的に設定する。例えば、動作テスト用プログラムの生成の際に、そのプログラムコードにおける関数の引数として入力データをあらかじめ設定する。また、操作内容ファイルの関数に対して入力データファイルが指定されていた場合には、その入力データファイルのデータをプログラム実行時に読み込むように設定する。
【００６６】
最後に、プログラム実行部１３４は、動作テスト用プログラムを実行して、ウェブサーバ４００に対してユーザにより実行された一連の操作を再現する（Ｓ２２８）。入力データファイルのデータを必要とする関数に対しては、動作テスト用プログラムの実行の際に読み込んだ入力データファイルのデータを引数として渡す。すなわち、入力データファイルから動的に取得した入力データに基づいて関数を実行する。
【００６７】
図１５は、関数設定画面２１０の画面図である。同図は、図１８で後述する「検索記入．ｘｌｓ」を表示する関数設定画面２１０を示している。データファイルカラム名欄２５０は、パラメータに設定する入力データを記録した入力データファイルのカラム名が指定される領域である。ユーザは、入力値欄２１７に入力データそのものを記述してもよく、その代わりに、データファイルカラム名欄２５０に入力データファイルのカラム名を指定してもよい。データファイルカラム名欄２５０に入力データファイルのカラム名が指定された場合、動作テスト用プログラムの実行時に、その入力データファイルのカラムに設定された１以上の入力データが読み込まれて関数に渡される。
【００６８】
図１６は、参考技術２における関数設定画面２１０の画面図である。同図の「検索部署名」パラメータの入力値欄２１７においては、入力データの候補がドロップダウンリスト２５２で一覧表示されている。ドロップダウンリスト２５２において表示される入力データの候補は、ウェブページに対するユーザによるデータ入力の際に、そのウェブページのドロップダウンリストにおいて表示された入力データの候補である。ユーザはドロップダウンリスト２５２から入力データを選択することができ、入力データの設定におけるユーザの負担が軽減される。
【００６９】
ドロップダウンリスト２５２を設定するために、操作検出部１１５は、ウェブページに対するユーザによるデータ入力操作の際に、そのウェブページのドロップダウンリストにおいて表示された入力データの候補を取得する。例えば、ウェブサーバ４００から取得されたウェブページのデータ、例えばＨＴＭＬデータからドロップダウンリストにおける入力データの候補を取得する。操作記録部１３７は、その入力データの候補を操作内容ファイルの入力値欄２１７に記録する。関数設定画面表示部１２０は、入力値欄２１７が入力される際に、操作内容ファイルに記録された入力データの候補をドロップダウンリストの形式で一覧表示させる。
【００７０】
図１７は、参考技術２における入力設定画面２３０の画面図である。図１７（ａ）は、図１５および図１６の関数設定画面２１０においてカラム名が指定された入力データファイル「検索記入データ．ｘｌｓ」を表示する入力設定画面２３０を示している。なお、図１５および図１６では、図１７（ａ）の「氏名漢字」カラムと「氏名カナ」カラムとが指定されている。図１７（ｂ）は、別の入力データファイル「ログインデータ２．ｘｌｓ」を表示する入力設定画面２３０を示している。同図の入力データファイルについては、図１８に関連して後述する。
【００７１】
図１８は、参考技術２におけるケース設定画面２４０の画面図である。実行番号欄２５３には各実行セットの基本的な実行順序、テストケースＩＤ欄２５４にはテストケースの識別情報が設定される。グループＩＤ欄２５６には実行セットの繰り返し処理のグループを示す識別情報、行番号欄２５８には動作テストにおける入力データファイルの参照範囲が設定される。操作内容ファイル欄２６０は各実行セットにおける操作内容ファイル、入力データファイル欄２６２は各実行セットの入力データファイルが設定される。ケース設定画面２４０における設定内容は、ケースファイル保持部１４８においてケースファイルとして記憶される。
【００７２】
ケース設定画面２４０においてテスト実行ボタン２６４が押下されると、プログラム生成部１３２は、ケースファイルおよび操作内容ファイルにしたがって動作テスト用プログラムを生成する。具体的には、ケースファイルにおいて同一のテストケースＩＤが設定された１以上の操作内容ファイルに基づいて、各操作内容ファイルに記録された関数がプログラムコードに設定された１つの動作テスト用プログラムを生成する。例えば、プログラム生成部１３２は、図１８のケース設定画面２４０の内容が記録されたケースファイルにしたがって、登録ケースを実行するための１つの動作テスト用プログラムと、検索ケースを実行するための１つの動作テスト用プログラムとを生成する。なお、「１つの動作テスト用プログラム」は、１つの実行単位として実行されるプログラム、言い換えれば１つの実行契機で実行されるプログラムを意味し、物理的なプログラム数は問わない。
【００７３】
プログラム実行部１３４は、各操作内容ファイルに記録された１つの関数を実行する際、その操作内容ファイルと対応づけられた入力データファイルのデータのうち、操作内容ファイルにおいてその関数と対応づけられたカラムのデータをその関数に渡す。
【００７４】
また、プログラム実行部１３４は、同一のテストケースにおいて同一のグループＩＤが付与された複数の実行セットを、同一の繰り返し処理を実行すべき同一のグループとして取り扱う。具体的には、同一のグループＩＤが付与された複数の実行セットそれぞれの実行を繰り返し、繰り返しのたびに、各実行セットの操作内容ファイルに記録された関数に対して、入力データファイルに記録された所定数のレコードを渡す。参考技術２では、繰り返しのたびに入力データファイルに記録された１レコードを関数に渡すこととする。なお、上述の処理を実行するための繰り返し命令がプログラムコードに設定された動作テスト用プログラムを、プログラム生成部１３２おいて生成してもよい。
【００７５】
また、プログラム実行部１３４は、行番号が指定された実行セットについては、その操作内容ファイルに記録された関数に対して、入力データファイルにおいてその行番号で特定される入力データを渡す。したがって、グループＩＤによる繰り返し処理が指定され、さらに行番号が指定された場合には、行番号の指定数だけその繰り返しを実行することになる。例えば、図１８の登録ケースでは、実行セットをまたがったグループの設定はなく、各実行セットでは入力データ１個分の処理が実行される。これに対し、図１８の検索ケースでは、各実行セットにおける入力データ１個分の処理が３回繰り返される。
【００７６】
具体的には、１回目の繰り返しでは、ログイン２．ｘｌｓに記録された関数に対してログインデータ２．ｘｌｓの３５行目のデータ「ｔ＿ｙａｍａｄａ」が渡される。そして、検索記入．ｘｌｓに記録された関数、具体的には図１５のＮｏ１の関数に対しては検索記入データ．ｘｌｓの１行目・氏名漢字のデータ「山田太郎」が渡される。また、図１５のＮｏ２の関数に対しては検索記入データ．ｘｌｓの１行目・氏名カナのデータ「ヤマダタロウ」が渡される。
２回目の繰り返しでは、ログイン２．ｘｌｓに記録された関数に対してログインデータ２．ｘｌｓの３６行目のデータ「ｈ＿ｙａｍａｄａ」が渡される。そして、検索記入．ｘｌｓに記録された図１５のＮｏ１の関数に対して検索記入データ．ｘｌｓの２行目・氏名漢字のデータ「山田花子」が渡される。また、図１５のＮｏ２の関数に対して検索記入データ．ｘｌｓの２行目・氏名カナのデータ「ヤマダハナコ」が渡される。
３回目の繰り返しにおいても同様に、インクリメントされた行番号における入力データが各関数に渡されることになる。
【００７７】
参考技術２の動作検証装置１００においても、参考技術１で既述した効果を奏する。具体的には、処理とパラメータの分離、および、ＧＵＩベースの設定が実現されるため、動作テスト用プログラムに含めるロジックの多様性を確保しつつも、安定した品質のプログラムを簡易に生成できる。また、入力データファイルの設定によって、動作テストのバリエーションを広げやすくなる。さらに、ケースファイルの設定によって、様々なシナリオにおける動作テストを実現できる。
【００７８】
参考技術２の動作検証装置１００においては、さらに、動作テスト用プログラムを実行する実行エンジン機能と、実行エンジンの効率的な利用を実現するラッパー機能とがシームレスに、ユーザによる仲介を要することなく連係する。これにより、動作テストを実行するためのユーザの負担を軽減できる。また、参考技術１の動作検証装置１００の場合と異なり、ユーザは、ＱＴＰのプロジェクト等、プログラム実行のための環境を意識する必要がない。すなわち、ユーザにとって理解・操作が容易な形式の操作内容ファイルと入力データファイルとを設定すればよい。これにより、ユーザは動作テストを容易に実施できるようになる。
【００７９】
参考技術２の動作検証装置１００においては、さらにまた、同一テストケースの複数の実行セットが集約された１つの動作テスト用プログラムが生成され、その１つの動作テスト用プログラムが実行される。参考技術１の動作検証装置１００における実行セット毎、すなわち実行セットに基づき生成されたＱＴＰのプロジェクト毎の実行と比較して、１つのテストケースにおける一連の動作テストを実行する際のオーバーヘッドが低減され、迅速な動作テストを実現できる。
【００８０】
参考技術２の動作検証装置１００においては、さらにまた、複数の実行セットに亘る繰り返しのグループを設定できる。これにより、実行セットを柔軟に分割でき、また、動作テストのシナリオを柔軟に設定できる。さらにまた、入力データファイルの参照範囲を設定できる。これにより、入力データファイルが同一であっても、シナリオに応じて柔軟に参照範囲を変更でき、様々なバリエーションの動作テストを容易に実現できる。
【００８１】
上述した参考技術２においては、関数設定画面２１０における値設定を支援する例としてドロップダウンリスト２５２を示した。変形例においては、ウェブページにおけるラジオボタン、チェックボックス、リストボックス等で選択可能に表示された入力データの候補が、ドロップダウンリスト２５２またはその他の形式で関数設定画面２１０において選択可能に表示されてもよい。すなわち、動作確認対象の機器に対するデータ入力操作の際にユーザに対して様々な形式で選択可能に表示された入力データの候補が、関数設定画面２１０における値設定の際に選択可能に表示されてもよい。
【００８２】
上述した参考技術１においては、ウェブサーバ４００に対するユーザの操作をＱＴＰが受け付け、ログを生成したことを条件として、動作検証装置１００が動作テスト用プログラムを作成している。また、上述した参考技術２においては、ウェブサーバ４００に対するユーザの操作を動作検証装置１００が検出して、動作テスト用プログラムを作成している。変形例として、動作検証装置１００においてウェブサーバ４００からＨＴＭＬファイルを取得した時点で、動作テスト用プログラムを生成してもよい。この場合、動作検証装置１００は、ＨＴＭＬファイルに含まれるフォームタグを検索し、ＨＴＭＬファイルにどのような入力インタフェースが含まれているかを特定する。そして、各入力インタフェースにデータを入力するための関数を選択し、これらの関数をさまざまな順序で並べれば、ユーザによる明示的なウェブ操作がなくても、動作テスト用のプログラムを生成できる。
【００８３】
（参考技術３）
まず参考技術３の概要を説明する。
現在、数多くのウェブブラウザが公開されており、ユーザのＰＣにおいても様々な種類のウェブブラウザが使用されている。したがって動作検証装置としては、複数種のウェブブラウザによるウェブページの動作テストをサポートできることが望ましい。この場合、動作検証装置は、ウェブブラウザの仕様に応じてウェブブラウザを操作する必要があり、そのアーキテクチャは以下の２つに大別される。なお、動作テストの対象となるウェブページを、以下では「テスト対象ページ」とも称する。
【００８４】
方式１．外部からの操作：
ウェブブラウザが外部に公開するＡＰＩ（Application Programming Interface）、すなわちウェブブラウザに表示中のテスト対象ページへの入力操作を受け付けるインタフェース（以下、「操作ＩＦ」とも呼ぶ）を呼び出すことにより、ウェブブラウザを外部から操作する。参考技術３の操作ＩＦは、具体的には、テスト対象ページに対してデータを入力し、またテスト対象ページのフォームを実行させ、またウェブサーバに対するＧＥＴリクエストやＰＯＳＴリクエストを送信させるための関数である。
【００８５】
方式２．内部からの操作：
テスト対象ページへの入力操作を受け付けて、その入力操作をウェブブラウザに実行させるスクリプト文書（以下、「制御コード」とも呼ぶ）を、テスト対象ページのプログラムコード（すなわちＨＴＭＬ文書）に対して追記する。そして、その制御コードを呼び出すことにより、ウェブブラウザを内部から操作する。言い換えれば、ウェブブラウザに表示されたウェブページに予め埋め込まれたスクリプト文書によってそのウェブブラウザを操作する。
【００８６】
参考技術３の制御コードは、テスト対象ページへの入力操作を外部から受け付けるインタフェース機能を含む関数が記述されたプログラムコードである。また、テスト対象ページのＤＯＭツリーを操作することによりテスト対象ページの表示内容を更新する機能や、ウェブサーバに対するＧＥＴリクエストやＰＯＳＴリクエストを送信する機能を含む関数が記述されたプログラムコードでもある。なお制御コードは、所定のスクリプト言語（例えば、ＪＡＶＡスクリプト（「ＪＡＶＡ」は登録商標））で記述されてもよい。
【００８７】
図１９は、ウェブブラウザに対する２つの操作方式の特徴を示す。同図は、外部からの操作方式と内部からの操作方式とを比較したものである。最重要と想定される動作テストそのものの信頼性については、内部からの操作方式はテスト対象ページを書き換えるものであるため、外部からの操作方式の方が優れるといえる。その一方で適合性および汎用性については、外部からの操作方式はウェブブラウザにおける操作ＩＦに依存するものであるため、内部からの操作方式の方が優れるといえる。
【００８８】
そこで参考技術３では、動作テストに使用するウェブブラウザの操作ＩＦが公開されている場合はウェブブラウザを外部から操作し、操作ＩＦが非公開である場合はウェブブラウザを内部から操作する動作検証装置を提案する。これにより、動作テストの信頼性をベストエフォートで確保しつつ、様々な種類のウェブブラウザによる動作テストをサポートできる。
【００８９】
図２０は、ウェブブラウザに対する２つの操作方式について機能間の呼び出し関係を模式的に示す。ウェブサーバ４００は、テスト対象ページを提供する情報処理装置である。ブラウザ４０２で総称されるブラウザＡ４０２ａ、ブラウザＢ４０２ｂ、ブラウザＣ４０２ｃ、ブラウザＤ４０２ｄは、ＨＴＴＰユーザエージェントとして機能するウェブブラウザであり、テスト対象ページの表示処理・操作処理等を実行する。なお、同図のブラウザＡ４０２ａおよびブラウザＢ４０２ｂはその操作ＩＦを外部に公開し、ブラウザＣ４０２ｃおよびブラウザＤ４０２ｄはその操作ＩＦを非公開とするものである。
【００９０】
個別ブラウザ用エンジン４０４で総称されるブラウザＡ用エンジン４０４ａとブラウザＢ用エンジン４０４ｂとのそれぞれは、ブラウザＡ４０２ａとブラウザＢ４０２ｂそれぞれの操作ＩＦを呼び出すプログラムコードである。共通ＩＦ４０６は、複数種のブラウザ４０２それぞれの操作ＩＦを呼び出すためのインタフェースであり、複数種のブラウザ４０２それぞれで異なる操作ＩＦに依存しない共通形式のインタフェースを備えるプログラムコードである。個別ブラウザ用エンジンドライバ４０８で総称されるブラウザＡ用エンジンドライバ４０８ａ、ブラウザＢ用エンジンドライバ４０８ｂは、ブラウザ４０２の種類に依存しない共通ＩＦ４０６形式のデータを、ブラウザ４０２ごとに異なる操作ＩＦ形式のデータへ変換することにより、動作テスト用プログラムと個別ブラウザ用エンジン４０４とをブリッジする。
【００９１】
プロキシサーバ４１０は、ブラウザ４０２の代理として、ウェブサーバからテスト対象ページを取得するリバースプロキシとして機能する。プロキシサーバ４１０は、テスト対象ページへ制御コードを追加した後、そのテスト対象ページをブラウザＣ４０２ｃおよびブラウザＤ４０２ｄへ提供する。内部操作エンジン４１２は、プロキシサーバ４１０を介して、テスト対象ページに付加された制御コードを呼び出す。内部操作エンジンドライバ４１４は、共通ＩＦ４０６形式のデータを、制御コードを呼び出すための所定形式のデータへ変換することにより、動作テスト用プログラムと内部操作エンジン４１２とをブリッジする。
【００９２】
図２０の動作を説明する。テスト対象ページを表示するウェブブラウザがブラウザＡ４０２ａ、またはブラウザＢ４０２ｂである場合、動作テスト用プログラムは共通ＩＦ４０６をコールする。それに伴って、個別ブラウザ用エンジンドライバ４０８・個別ブラウザ用エンジン４０４を介して、ウェブブラウザの操作ＩＦがコールされることにより、ウェブブラウザが操作され、テスト対象ページへの入力操作が実現される。
【００９３】
一方で、テスト対象ページを表示するウェブブラウザがブラウザＣ４０２ｃ、またはブラウザＤ４０２ｄである場合、プロキシサーバ４１０はテスト対象ページに制御コードを追加して、そのテスト対象ページをウェブブラウザに表示させる。この場合も動作テスト用プログラムは共通ＩＦ４０６をコールし、内部操作エンジンドライバ４１４・内部操作エンジン４１２・プロキシサーバ４１０を介して、テスト対象ページに付加された制御コードが呼び出される。これにより、ウェブブラウザの操作ＩＦを介することなくウェブブラウザが操作され、テスト対象ページへの入力操作が実現される。
【００９４】
図２０の構成によれば、個別ブラウザ用エンジンドライバ４０８および内部操作エンジンドライバ４１４によりウェブブラウザのインタフェースの差異が吸収される。これにより、動作テスト用プログラムは、ウェブページの動作テストで使用するウェブブラウザ（以下、「テスト実行ブラウザ」とも呼ぶ）の種類によらず、常に共通ＩＦ４０６を呼び出すことでテスト実行ブラウザを操作できる。言い換えれば、同一の動作テスト用プログラムにより、複数種のウェブブラウザによる動作テストを自動実行させることができる。
【００９５】
図２１は、参考技術３の動作検証装置の機能構成を示すブロック図である。同図の機能ブロックのうち、参考技術１および２で示した動作検証装置１００の機能ブロックに対応する機能ブロックには、同じ符号を付している。同じ符号を付した機能ブロックについては、その機能が参考技術１および２に既述した内容と異なる場合に記載しており、同様の機能については既述であるため適宜その記載を省略する。
【００９６】
動作検証装置１００は、図１３で示した機能ブロックに加え、ブラウザ処理部１６０をさらに備える。ブラウザ処理部１６０は、図２０のブラウザ４０２に対応し、ウェブブラウザとして機能する。なお、単一の動作検証装置１００が複数種のブラウザ処理部１６０を備えてもよいことはもちろんである。
【００９７】
プログラム実行部１３４は、動作テスト用プログラムの実行に際し、テスト実行ブラウザの種類、言い換えれば、ブラウザ処理部１６０の態様に応じて、外部からの操作方式または内部からの操作方式を選択してブラウザ処理部１６０を操作する。図２２は、図２１のプログラム実行部１３４の詳細を示すブロック図である。プログラム実行部１３４は、テスト主体選択部１６２と、外部操作実行部１６４と、プロキシ処理部１６６と、内部操作実行部１６８と、証左物設定部１７０とを含む。
【００９８】
テスト主体選択部１６２は、テスト実行ブラウザの種類を示す情報、言い換えれば、ブラウザ処理部１６０における操作ＩＦの公開状況を示す情報を所定の設定ファイルや動作テスト用プログラムから取得し、その情報にしたがって動作テストの実行主体を決定する。例えば、各種ウェブブラウザとそれぞれの操作ＩＦの公開状況とを対応づけたテーブルを参照して、テスト実行ブラウザにおける操作ＩＦの公開状況を特定してもよい。
【００９９】
テスト主体選択部１６２は、ブラウザ処理部１６０が操作ＩＦを外部に公開するものである場合、動作テストの実行主体として後述する外部操作実行部１６４を選択する。その一方で、ブラウザ処理部１６０が操作ＩＦを外部に非公開とするものである場合、動作テストの実行主体として後述するプロキシ処理部１６６および内部操作実行部１６８を選択する。
【０１００】
外部操作実行部１６４は、図２０の個別ブラウザ用エンジン４０４に対応し、動作テスト用プログラムの実行に際し、動作テスト用プログラムによる共通ＩＦ４０６の呼び出しを検出する。そして、ブラウザ処理部１６０が公開する操作ＩＦを呼び出すことにより、ブラウザ処理部１６０を操作して、テスト対象ページに対する入力操作を実行する。
【０１０１】
プロキシ処理部１６６は、図２０のプロキシサーバ４１０に対応し、ブラウザ処理部１６０から要求されたテスト対象ページをウェブサーバ４００から代理取得し、テスト対象ページのＨＴＭＬコード内に制御コードを挿入する。そして改変後のテスト対象ページのＨＴＭＬコードをブラウザ処理部１６０へ送出して表示させる。またプロキシ処理部１６６は、後述する内部操作実行部１６８から制御コードの呼び出しを受け付け、テスト対象ページに追加した制御コードを呼び出す。プロキシ処理部１６６とテスト対象ページとの通信は、ＸＭＬＨｔｔｐＲｅｑｕｅｓｔによる非同期通信として実装されてもよい。
【０１０２】
内部操作実行部１６８は、図２０の内部操作エンジン４１２に対応し、動作テスト用プログラムの実行に際し、動作テスト用プログラムによる共通ＩＦ４０６の呼び出しを検出する。そして、プロキシ処理部１６６を介して、テスト対象ページに追加された制御コードを呼び出すことにより、ブラウザ処理部１６０を操作して、テスト対象ページに対する入力操作を実行する。なお、プロキシ処理部１６６および内部操作実行部１６８は、テスト自動化ツールとして公開されているＳｅｌｅｎｉｕｍ（http://seleniumhq.org/）のライブラリを用いて実装されてもよい。
【０１０３】
証左物設定部１７０は、外部操作実行部１６４または内部操作実行部１６８からの要求に応じて、動作テストの結果を証明するデータ（以下、「証左物」とも呼ぶ）を設定し、その証左物を結果保持部１５２へ格納する。証左物として、ブラウザ処理部１６０によりディスプレイに表示されたテスト対象ページの画面スナップを取得し、また、ウェブサーバ４００とのＨＴＴＰ通信で送受されるデータを取得してもよい。なお、画面スナップの取得機能は、動作検証装置１００のオペレーティングシステム（以下、「ＯＳ」とも呼ぶ。）により提供されてもよく、ＨＴＴＰ通信データの取得機能は、動作検証装置１００にインストールされたパケットキャプチャソフトにより提供されてもよい。
【０１０４】
以上の構成による動作を以下説明する。
図２３は、動作検証装置１００の動作を示すフローチャートである。同図は、動作検証装置１００において動作テスト用プログラムが実行される際の動作を示すものである。例えば、図１２におけるＳ２１８の詳細を示すものであり、図１４におけるＳ２２８の詳細を示すものでもある。
【０１０５】
テスト対象ページの動作テストの開始時、テスト主体選択部１６２は、ブラウザ処理部１６０における操作ＩＦの公開状況に応じて、動作テストの実行エンジンを選択する（Ｓ３００）。ブラウザ処理部１６０は、ウェブサーバ４００に対してテスト対象ページの提供を要求する（Ｓ３０２）。ブラウザ処理部１６０において操作ＩＦが非公開である場合（Ｓ３０４のＮ）、プロキシ処理部１６６は、テスト対象ページを代理取得して、そのＨＴＭＬコードへ制御コードを追加した後、テスト対象ページをブラウザ処理部１６０へ送出する（Ｓ３０６）。操作ＩＦが公開されていれば（Ｓ３０４のＹ）、Ｓ３０６はスキップされる。ブラウザ処理部１６０は、テスト対象ページを所定のディスプレイに表示させる（Ｓ３０８）。証左物設定部１７０は、テスト対象ページの画面スナップを取得する等、動作テストの証左物を設定して結果保持部１５２へ格納する（Ｓ３１０）。
【０１０６】
動作テストで実行すべき全操作が実行済であれば（Ｓ３１２のＹ）、本図のフローを終了する。未実行の操作が残っており（Ｓ３１２のＮ）、ブラウザ処理部１６０において操作ＩＦが公開されている場合（Ｓ３１４のＹ）、外部操作実行部１６４は、動作テスト用プログラムによるテスト対象ページへの入力操作を、その操作ＩＦをコールすることにより実行する（Ｓ３１６）。操作ＩＦが非公開であれば（Ｓ３１４のＮ）、内部操作実行部１６８は、動作テスト用プログラムによるテスト対象ページへの入力操作を、そのテスト対象ページに追加された制御コードをコールすることにより実行する（Ｓ３１８）。テスト対象ページへの操作により新たなウェブページの提供が要求される場合、例えば、ＧＥＴリクエストやＰＯＳＴリクエスト等による画面遷移が発生する場合（Ｓ３２０のＹ）、Ｓ３０４に戻る。新たなウェブページの提供が要求されなければ（Ｓ３２０のＮ）、Ｓ３１０に戻る。
【０１０７】
参考技術３の動作検証装置１００は、参考技術１および２に記載の動作検証装置１００の構成を前提として、複数種のウェブブラウザにおけるウェブページの動作テストをサポートするための構成を追加したものである。したがって、参考技術３の動作検証装置１００の構成は、参考技術１および２に記載の効果をそのまま奏するとともに、さらに以下の効果を奏するものである。
【０１０８】
動作検証装置１００では、ウェブブラウザの操作方式として、内部からの操作方式を実装することにより、ウェブブラウザにおける操作ＩＦの公開有無によらず、複数種のウェブブラウザにおけるウェブページの動作テストを実行できる。また、動作検証装置１００では、ウェブブラウザの操作方式として、外部からの操作方式も実装しており、ウェブブラウザが操作ＩＦを公開する場合は、外部からの操作方式で動作テストを行うことにより、動作テストの信頼性を担保しやすくなる。
【０１０９】
以上、参考技術３の動作検証装置１００を説明した。
参考技術３では、プロキシサーバ４１０に対応するプロキシ処理部１６６は、動作検証装置１００に内包されることとした。変形例では、プロキシ処理部１６６は、動作検証装置１００とは異なる別の情報処理装置に備えられてもよい。
【０１１０】
一部既述したが、単一の動作検証装置１００に複数種のウェブブラウザがインストールされてもよく、動作検証装置１００は複数種のウェブブラウザに対応する複数のブラウザ処理部１６０を備えてもよい。この場合、プログラム実行部１３４は、それぞれのウェブブラウザにおいてテスト対象ページの動作テストを実行してもよい。すなわち、図２３で示す処理をウェブブラウザごとに並行実行してもよい。複数種のウェブブラウザにおける動作テストを単一の動作検証装置１００において実施できることで、効率的かつ低コストでの動作テストを実現できる。
【０１１１】
参考技術３では、ウェブブラウザの種類ごとに内部からの操作方式と外部からの操作方式とのいずれかが選択された。変形例では、単一のウェブブラウザでの動作テストにおいて両方式が組み合わせられてもよい。例えば、テスト対象ページに対する操作のうち、公開された操作ＩＦを使用して実行可能な操作は外部からの操作方式を適用し、すなわち外部操作実行部１６４が操作ＩＦをコールする。その一方で、公開された操作ＩＦでは実行不可な操作は内部からの操作方式を適用し、すなわち内部操作実行部１６８が制御コードをコールする。ウェブページ内に記述されたスクリプトコードには一般的に広範な操作が許容されるため、操作ＩＦの仕様に依存して発生する外部からの操作方式での制約を、内部からの操作方式により補完することができる。
【０１１２】
（参考技術４）
参考技術４では、上記の参考技術３に関連し、様々な種類のウェブブラウザによるウェブページの動作テストをサポートする動作検証装置１００を提案する。以下の説明における「Ｗｉｎｄｏｗｓ（ウィンドウズ）」、「Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅr（インターネット・エクスプローラ）」、「Ｆｉｒｅｆｏｘ（ファイアフォックス）」、「Ｍａｃ（マック）」、「Ｍａｃ  ＯＳ（マック・オーエス）」、「Ｓａｆａｒｉ（サファリ）」、「ＪＡＶＡ」等の名称は、各社の商標または登録商標である。
【０１１３】
図２４は、ウェブページの動作テストにおける機能間の呼び出し関係を模式的に示す。同図の動作検証エンジン５００は、動作検証装置１００におけるウェブページの動作テストのためのコア機能を示している。Ｗｉｎｄｏｗｓ環境５４０は、ウィンドウズＯＳにおける環境を示し、Ｍａｃ環境５６０はＭａｃＯＳにおける環境を示している。なお、ＯＳにウィンドウズがインストールされた動作検証装置１００は、動作検証エンジン５００およびＷｉｎｄｏｗｓ環境５４０の組み合わせで構成されてもよい。また、ＯＳにＭａｃＯＳがインストールされた動作検証装置１００は、動作検証エンジン５００およびＭａｃ環境５６０の組み合わせで構成されてもよい。
【０１１４】
図２４のＩＥ（インターネット・エクスプローラ）ブラウザ５４２は、外部のアプリケーションから呼び出し可能な操作ＩＦであるＣＯＭ５５０を公開している。したがって、ＩＥブラウザ５４２に表示されたウェブページの操作には、参考技術３における外部からの操作方式が採用される。その一方で、ＦＦ（ファイアフォックス）ブラウザ５４６およびＳａｆａｒｉブラウザ５６２は、外部のアプリケーションから呼び出し可能な操作ＩＦが公開されていない。したがって、これらのブラウザに表示されたウェブページに対する操作には、参考技術３における内部からの操作方式が採用される。
【０１１５】
図２４では、内部からの操作方式のためのセレニウムモジュール５３０を示している。セレニウムモジュール５３０は、図２０の内部操作エンジン４１２およびプロキシサーバ４１０に対応し、テスト自動化ツールとして公開されているＳｅｌｅｎｉｕｍ（http://seleniumhq.org/）のサーバプログラムである。セレニウムモジュール５３０は、ウェブページを表示するウェブブラウザのウィンドウ（以下、「ブラウザウィンドウ」とも呼ぶ。）に対して独自の識別子を割り当てる。そして、クライアントからその識別子が指定されることにより、操作対象とすべきブラウザウィンドウ（言い換えればウェブページ）を一意に識別する。
【０１１６】
共通ＩＦ４０６は、図２０の共通ＩＦ４０６に対応する。ＩＥドライバ５０２は、図２０の個別ブラウザ用エンジンドライバ４０８に対応する。ＩＥドライバ５０２は、ＩＥブラウザ５４２を使用したウェブページの動作テストにおいて、動作テスト用プログラム（以下、「テスト・プログラム」とも呼ぶ。）とＩＥブラウザ５４２のブリッジとして機能する。ＩＥドライバ５０２は、ＩＥウィンドウマネージャ５０４と、ＩＥブラウザ操作部５０６と、ＩＥダイアログ操作部５０８とを含む。
【０１１７】
ＩＥウィンドウマネージャ５０４は、ウェブページを表示させたブラウザウィンドウに対して、ユーザがテスト・プログラムにおいて割り当てた識別子（以下、「ユーザ割当ＩＤ」とも呼ぶ。）と、ＯＳが割り当てた識別子（以下、「ＯＳ割当ＩＤ」）との対応関係を管理する。
【０１１８】
ＩＥブラウザ操作部５０６は、ウェブページの操作を行うべきブラウザウィンドウ（以下、「操作対象ウィンドウ」とも呼ぶ。）について、テスト・プログラムで指定されたユーザ割当ＩＤに対応するＯＳ割当ＩＤを特定する。それとともに、テスト・プログラムで指定された操作内容に対応するＣＯＭ５５０の関数を特定する。そして、ＯＳ割当ＩＤを指定してＣＯＭ５５０の関数を呼び出すことにより、ＩＥブラウザ５４２を外部から操作し、操作対象ウィンドウにおけるウェブページの操作をＩＥブラウザ５４２に実行させる。ウェブページの操作に応じて、ＩＥブラウザ５４２は、ウィンドウズＯＳのリソースを直接使用してダイアログボックスを表示させる場合がある。このダイアログボックスを以下では「ＯＳダイアログ」とも呼ぶ。
【０１１９】
ＩＥダイアログ操作部５０８は、ＩＥブラウザ５４２が表示させたＯＳダイアログ５４４を操作する。具体的には、ＯＳダイアログ５４４が表示されたことを検出して、テスト・プログラムで指定されたダイアログ操作に対応するＷｉｎ３２ＡＰＩ５５２の関数を呼び出すことにより、ＯＳダイアログ５４４に対する操作を実行する。なお、ＯＳダイアログ５４４に対する典型的な操作内容としては、文字列の入力や、表示項目の選択、ボタンの押下等が挙げられる。後述するＦＦダイアログ５４８やＳａｆａｒｉダイアログ５６４に対する操作内容も同様である。
【０１２０】
ＦＦドライバ５１０は、図２０の内部操作エンジンドライバ４１４に対応し、ＦＦブラウザ５４６を使用したウェブページの動作テストにおいて、テスト・プログラムとＦＦブラウザ５４６とのブリッジとして機能する。ＦＦドライバ５１０は、ＦＦウィンドウマネージャ５１２と、ＦＦブラウザ操作部５１４と、ＦＦダイアログ操作部５１６とを含む。
【０１２１】
ＦＦウィンドウマネージャ５１２は、ウェブページを表示させたブラウザウィンドウに対して、セレニウムモジュール５３０が割り当てた識別子（以下、「セレニウム割当ＩＤ」とも呼ぶ。）と、当該ウィンドウに対するユーザ割当ＩＤとＯＳ割当ＩＤとの対応関係を管理する。
【０１２２】
ＦＦブラウザ操作部５１４は、操作対象ウィンドウについて、テスト・プログラムで指定されたユーザ割当ＩＤに対応するセレニウム割当ＩＤを特定する。それとともに、テスト・プログラムで指定された操作内容に対応するセレニウムモジュール５３０の関数を特定する。そして、セレニウム割当ＩＤを指定してセレニウムモジュール５３０の関数を呼び出す。これに応じてセレニウムモジュール５３０は、セレニウム割当ＩＤにもとづき操作対象ウィンドウを特定し、当該操作対象ウィンドウに表示されたウェブページの制御コードのうち、呼び出された関数に対応する制御コードを呼び出す。これにより、操作対象のウェブページにおいて特定のＪＡＶＡスクリプトが動作して、ＦＦブラウザ５４６を内部から操作し、テスト・プログラムで指定されたウェブページの操作が実現される。
【０１２３】
ＦＦブラウザ操作部５１４は、セレニウムモジュール５３０を介さずに操作すべき所定の操作、典型的にはブラウザウィンドウのクローズ処理がテスト・プログラムで指定された場合は、セレニウムモジュール５３０の呼び出しを抑止する。その代わりに、ＩＥダイアログ操作部５０８と同様に、Ｗｉｎ３２ＡＰＩ５５２を呼び出すことにより当該操作を実行する。
【０１２４】
ウェブページの操作に応じて、ＦＦブラウザ５４６は、ＯＳダイアログ５４４を表示させ、または、ＦＦブラウザ５４６の独自のリソースを使用したダイアログボックス（以下、「ＦＦダイアログ」とも呼ぶ。）を表示させる場合がある。典型的には、ファイルの保存等ＯＳと連携する場合にはＯＳダイアログ５４４を表示させ、ＪＡＶＡスクリプトによるアラートダイアログとしてはＦＦダイアログ５４８を表示させる。
【０１２５】
ＦＦダイアログ操作部５１６は、ＯＳダイアログ５４４およびＦＦダイアログ５４８を操作する。具体的には、ＯＳダイアログ５４４の表示を検出すると、テスト・プログラムで指定されたダイアログ操作に対応するＷｉｎ３２ＡＰＩ５５２の関数を呼び出すことにより、そのＯＳダイアログ５４４に対する操作を実行する。また、ＦＦダイアログ５４８の表示を検出すると、ＦＦブラウザ５４６に予め設定した拡張機能であるＦＦプラグイン５５４を呼び出してダイアログ操作を指示することにより、ＦＦダイアログ５４８に対する操作を実行する。この詳細は図２６に関連して後述する。
【０１２６】
Ｓａｆａｒｉドライバ５２０は、図２０の内部操作エンジンドライバ４１４に対応し、Ｓａｆａｒｉブラウザ５６２を使用したウェブページの動作テストにおいて、テスト・プログラムとＳａｆａｒｉブラウザ５６２とのブリッジとして機能する。Ｓａｆａｒｉドライバ５２０は、Ｓａｆａｒｉウィンドウマネージャ５２２と、Ｓａｆａｒｉブラウザ操作部５２４と、Ｓａｆａｒｉダイアログ操作部５２６とを含む。Ｓａｆａｒｉウィンドウマネージャ５２２は、ウェブページが表示されたウィンドウに対するユーザ割当ＩＤとＯＳ割当ＩＤとセレニウム割当ＩＤとの対応関係を管理する。なお、ＭａｃＯＳでは、ブラウザウィンドウに対してＩＤを割り当てるのはＳａｆａｒｉブラウザ５６２であるが、記載の簡明化のため、その名称はＯＳ割当ＩＤで統一する。
【０１２７】
Ｓａｆａｒｉブラウザ操作部５２４は、操作対象のウィンドウについて、テスト・プログラムで指定されたユーザ割当ＩＤに対応するセレニウム割当ＩＤを特定する。それとともに、テスト・プログラムで指定された操作内容に対応するセレニウムモジュール５３０の関数を特定する。そして、セレニウム割当ＩＤを指定してセレニウムモジュール５３０の関数を呼び出す。これにより、ＦＦブラウザ操作部５１４と同様に、操作対象のウェブページに対する操作を、セレニウムモジュール５３０を介して実行する。
【０１２８】
Ｓａｆａｒｉブラウザ操作部５２４は、セレニウムモジュール５３０を介さずに操作すべき所定の操作、典型的にはウィンドウのクローズ処理がテスト・プログラムで指定された場合は、セレニウムモジュール５３０の呼び出しを抑止する。その代わりに、ＭａｃＯＳが提供するＡＰＩを呼び出すことにより当該操作を実行する。具体的には、障害者のためのアプリケーションによる利用のために供されたＡＰＩ群であるアクセシビリティＡＰＩ５６６を呼び出す。この詳細は図２７に関連して後述する。
【０１２９】
ウェブページの操作に応じて、Ｓａｆａｒｉブラウザ５６２はダイアログ（以下、「Ｓａｆａｒｉダイアログ」とも呼ぶ。）を表示させる場合がある。Ｓａｆａｒｉダイアログ操作部５２６は、Ｓａｆａｒｉダイアログ５６４の表示を検出すると、テスト・プログラムで指定されたダイアログ操作に対応するＭａｃＯＳのＡＰＩを呼び出すことにより、Ｓａｆａｒｉダイアログ５６４に対する操作を実行する。この際にも、上述のアクセシビリティＡＰＩ５６６を呼び出す。この詳細は図２７に関連して後述する。
【０１３０】
上記のＦＦウィンドウマネージャ５１２およびＳａｆａｒｉウィンドウマネージャ５２２は、セレニウムウィンドウマネージャ５３２として総称される。図２５は、セレニウムウィンドウマネージャ５３２に格納されるデータ例を示す。同図で示すように、セレニウムウィンドウマネージャ５３２は、ウェブページの動作テストにおいて各ブラウザウィンドウへ割り当てられたユーザ割当ＩＤとセレニウム割当ＩＤとＯＳ割当ＩＤとを対応づけて保持する。なお、ＩＥブラウザ５４２の操作にはセレニウムモジュール５３０を介さない。そのため、ＩＥウィンドウマネージャ５０４は、ユーザ割当ＩＤとＯＳ割当ＩＤのみを対応づけて保持する。
【０１３１】
また、上記のＦＦブラウザ操作部５１４およびＳａｆａｒｉブラウザ操作部５２４は、セレニウムモジュール５３０を介してウェブブラウザを操作するセレニウムブラウザ操作部５３４として総称される。
【０１３２】
図２６は、図２４のＦＦダイアログ５４８に対する操作の仕組みを示す。セレニウムモジュール５３０において、ＦＦブラウザ５４６の起動時に、ＦＦブラウザ５４６によって読み込まれるＦＦプロファイル５７０に、ＪＡＶＡスクリプトで実装されたウィンドウハンドラ５７２が予め設定される。ＦＦブラウザ５４６は、新規のブラウザウィンドウを開く際に、ＦＦプラグイン５５４の記憶領域にウィンドウハンドラ５７２を読み込むことにより、ウィンドウハンドラ５７２の機能が追加的に組み込まれる。
【０１３３】
ウィンドウハンドラ５７２は、ＦＦプラグイン５５４として組み込まれた際、ＦＦブラウザ５４６によるウィンドウ生成を検出するリスナオブジェクトを、ＸＰＣｏｎｎｅｃｔ５７８およびＸＰＣＯＭ５８０を介してウィンドウウオッチャ（ＷｉｎｄｏｗＷａｔｃｈｅｒ）５８２へ登録する。ウィンドウハンドラ５７２は、登録したリスナオブジェクトを介して、ＦＦダイアログ５４８が生成されたことを検出すると、ＦＦダイアログ操作部５１６のソケットサーバ５７４とソケット通信を行い、ＦＦダイアログ５４８が生成された旨を通知する。この通知情報には、ＦＦダイアログ５４８における表示文字列や、ボタン等の表示オブジェクトを示す表示態様情報が含まれる。
【０１３４】
ＦＦダイアログ操作部５１６は、ＦＦダイアログ５４８が生成された旨が通知されると、テスト・プログラムで指定されたダイアログ操作に対応した関数であり、ＸＰＣＯＭ５８０の関数の識別情報をウィンドウハンドラ５７２へ通知する。ウィンドウハンドラ５７２は、ＦＦダイアログ操作部５１６により指定されたＸＰＣＯＭ５８０の関数を呼び出すことにより、ＦＦダイアログ５４８を操作する。なお、ＦＦダイアログ操作部５１６は、ＦＦダイアログ５４８の表示態様に応じて、ＦＦダイアログ５４８に対する操作内容を適宜調整してもよい。例えば、テスト・プログラムで指定されたボタン押下操作に対して、押下対象のボタンのＩＤを追加した上で、その操作指示をウィンドウハンドラ５７２へ通知してもよい。
【０１３５】
既述したように、ＦＦブラウザ５４６は、ＪＡＶＡスクリプトのアラートダイアログとして、ＦＦダイアログ５４８を表示させる。このＦＦダイアログ５４８は、ＦＦブラウザ５４６独自のリソースを使用して表示されたものであるため、ＯＳ側からはダイアログの内容を判別できない。例えば、ＦＦダイアログ５４８における表示文字列や、ボタン等の表示オブジェクトが判別できない。そのため、ＯＳダイアログ５４４に対する操作のように、Ｗｉｎ３２ＡＰＩ５５２を介しての操作ができない。例えば、ＦＦダイアログ５４８に表示されたボタンに対する押下操作ができない。
【０１３６】
そこで参考技術４では、ＦＦブラウザ５４６におけるＦＦダイアログ５４８表示の監視機能をプラグインとして追加することにより、ＦＦダイアログ５４８の表示内容の取得を可能にし、また、ＦＦダイアログ５４８に対する操作を実現する。
【０１３７】
なお、ＦＦブラウザ操作部５１４は、セレニウムモジュール５３０を介してＦＦブラウザ５４６を操作するため、ウェブページのプログラムコードにダイアログ操作のための関数（例えば、ウィンドウハンドラ５７２と同様のプログラムコード）を設定することもできる。しかし、ＦＦダイアログ５４８がモーダルダイアログ（アプリケーションモーダルダイアログまたはシステムモーダルダイアログ）である場合、その表示元のウェブページのコードからはダイアログを操作できなくなる。その一方で、ＦＦプラグイン５５４として組み込まれたウィンドウハンドラ５７２はモーダルダイアログへの操作を継続できる。この観点から、ウィンドウハンドラ５７２は、ＦＦブラウザ５４６の拡張機能として設定されることが望ましいといえる。
【０１３８】
図２７は、図２４のＳａｆａｒｉダイアログ５６４に対する操作の仕組みを示す。同図のＡｐｐｌｅスクリプト５８４は、ＭａｃＯＳにおけるアプリケーション間通信技術であるＡｐｐｌｅイベントを呼び出すスクリプトである。システムイベント５８６は、ＭａｃＯＳが提供するアプリケーションであり、Ａｐｐｌｅスクリプト５８４とアクセシビリティＡＰＩ５６６とを仲介して、Ａｐｐｌｅスクリプト５８４によるアクセシビリティＡＰＩ５６６の呼び出しを実現させる。
【０１３９】
図２７はＭａｃＯＳを４階層で示しており、上位の階層は下位の階層よりも抽象度が高いＡＰＩ、言い換えれば、高レベルのＡＰＩを提供する。同図で示すように、アクセシビリティＡＰＩ５６６は、最上位の階層「ユーザ・エクスペリエンス」に属する。既述したように、アクセシビリティＡＰＩ５６６は、障害者向けのユーザビリティを確保するためのＵＩ自動化機能に関するＡＰＩ群である。自動化される操作内容には、ウィンドウを開く・ボタンを押下する等、各種のユーザインタフェース（画面）操作が含まれる。
【０１４０】
Ｓａｆａｒｉダイアログ操作部５２６は、テスト・プログラムで指定されたダイアログ操作に対応するアクセシビリティＡＰＩ５６６の関数を特定して、その関数を指定したＡｐｐｌｅスクリプト５８４をシステムイベント５８６へ送信する。これにより、システムイベント５８６を介して、アクセシビリティＡＰＩ５６６として用意されたダイアログ操作の関数を呼び出す。
【０１４１】
なお、Ｓａｆａｒｉダイアログ５６４に対する操作は、ＭａｃＯＳにおけるより低レベルなＡＰＩ群を用いても実現可能である。例えば、Ｓａｆａｒｉダイアログ操作部５２６がグラフィックス・アンド・メディア階層の「Ｑｕａｒｔｚ」ＡＰＩを呼び出すことによっても、Ｓａｆａｒｉダイアログ５６４に対する操作を実行できる。しかし、アクセシビリティＡＰＩ５６６は、ユーザによるＵＩ操作に対応する高レベルな関数を提供するため、アクセシビリティＡＰＩ５６６を利用することで、Ｓａｆａｒｉダイアログ操作部５２６のコード量を低減でき、また、その保守性を高めることができる。
【０１４２】
また図２７では図示しないが、Ｓａｆａｒｉブラウザ操作部５２４は、ウェブページに対する操作のうち、セレニウムモジュール５３０を介さず行うべき所定の操作については、Ｓａｆａｒｉダイアログ操作部５２６と同様に、アクセシビリティＡＰＩ５６６を呼び出す。これにより、当該操作をＭａｃＯＳやＳａｆａｒｉブラウザ５６２に実行させる。
【０１４３】
図２８は、参考技術４の動作検証装置１００の機能構成を示すブロック図である。同図の機能ブロックのうち、参考技術１乃至３で示した動作検証装置１００の機能ブロックと同一もしくは対応する機能ブロックには、同じ符号を付している。同じ符号を付した機能ブロックについては、その機能が参考技術１乃至３において既述した内容と異なる場合に記載しており、同様の機能については適宜その記載を省略する。
【０１４４】
動作検証装置１００は、ウィンドウＩＤ保持部１５４およびＩＤ取得部１３９をさらに備える。ウィンドウＩＤ保持部１５４およびＩＤ取得部１３９は、図２４のＩＥウィンドウマネージャ５０４およびセレニウムウィンドウマネージャ５３２に対応する。すなわち、ウィンドウＩＤ保持部１５４は、ウェブページを表示するブラウザウィンドウに対して割り当てられたユーザ割当ＩＤ、セレニウム割当ＩＤ、ＯＳ割当ＩＤとの対応関係を保持する。
【０１４５】
ＩＤ取得部１３９は、ＯＳ（ウィンドウズＯＳやＭａｃＯＳ）から、ブラウザウィンドウに対するＯＳ割当ＩＤを取得する。ウィンドウズＯＳの場合、ＩＤ取得部１３９は、Ｗｉｎ３２ＡＰＩをコールすることにより得られるウィンドウハンドルを取得する。例えば、関数「ＦｉｎｄＷｉｎｄｏｗ」が返すＨＷＮＤ値をｌｏｎｇ型の整数として取得して、ウィンドウＩＤ保持部１５４のＯＳ割当ＩＤフィールドに格納する。関数「ＦｉｎｄＷｉｎｄｏｗ」が返す複数種類のＨＷＮＤ値のうち、ウィンドウＩＤ保持部１５４に未格納のものについて、ウィンドウＩＤ保持部１５４の新たなレコードとして追加してもよい。
【０１４６】
またＭａｃＯＳの場合、ＩＤ取得部１３９は、ＡｐｐｌｅスクリプトによりＳａｆａｒｉブラウザ５６２から得られるｌｏｎｇ値を取得して、ウィンドウＩＤ保持部１５４のＯＳ割当ＩＤフィールドに格納する。例えば、以下のスクリプト、
ｔｅｌｌ  ａｐｐｌｉｃａｔｉｏｎ  ”Ｓａｆａｒｉ”
ｒｅｔｕｒｎ  ｉｄ  ｏｆ  ｗｉｎｄｏｗｓ
ｅｎｄ  ｔｅｌｌ
を実行して、それぞれのブラウザウィンドウに対してＳａｆａｒｉブラウザ５６２が割り当てたｌｏｎｇ値の一覧を取得してもよい。
【０１４７】
またＩＤ取得部１３９は、セレニウムモジュール５３０（Ｓｅｌｅｎｉｕｍ−ＣＯＲＥ）がブラウザウィンドウごとに割り当てたウィンドウ属性値である「ｓｅｌｅｎｉｕｍＷｉｎｄｏｗＮａｍｅ」を取得する。そして、そのウィンドウ属性値をセレニウム割当ＩＤとして、ウィンドウＩＤ保持部１５４のセレニウム割当ＩＤフィールドに格納する。例えば、セレニウムモジュール５３０の関数「ｇｅｔＡｔｔｒｉｂｕｔｅＦｒｏｍＡｌｌＷｉｎｄｏｗｓ（”ｓｅｌｅｎｉｕｍｗｉｎｄｏｗＮａｍｅ”）」を呼び出すことにより、セレニウムモジュール５３０で管理されるウィンドウ属性値の一覧を取得する。
【０１４８】
またＩＤ取得部１３９は、後述するＩＤ割当部１７４およびＩＤ割当部１８０がブラウザウィンドウに対して割り当てたユーザ割当ＩＤを取得して、ウィンドウＩＤ保持部１５４のユーザ割当ＩＤフィールドに格納する。なおＩＤ取得部１３９は、ユーザ割当ＩＤとセレニウム割当ＩＤとＯＳ割当ＩＤとのそれぞれを、時間軸上での割当順（ＩＤ取得部１３９における取得順）にウィンドウＩＤ保持部１５４へ逐次格納してもよい。これにより、時間軸上で先に割り当てられたＩＤ（例えばセレニウム割当ＩＤ）は、同様に時間軸上で先に割り当てられた別のＩＤ（例えばユーザ割当ＩＤ）と対応づけられることになる。
【０１４９】
図２９は、図２８のプログラム実行部１３４の詳細を示すブロック図である。プログラム実行部１３４は、テスト環境判定部１７１と、外部操作実行部１６４と、プロキシ処理部１６６と、内部操作実行部１６８と、証左物設定部１７０とを備える。同図の機能ブロックのうち、参考技術３で示したプログラム実行部１３４の機能ブロックと同一もしくは対応する機能ブロックには、同じ符号を付している。同じ符号を付した機能ブロックについては、その機能が参考技術３において既述した内容と異なる場合に記載しており、同様の機能については適宜その記載を省略する。
【０１５０】
テスト環境判定部１７１は、参考技術３（図２１）におけるテスト主体選択部１６２に対応し、ウェブページの動作テストのための環境、具体的にはＯＳとウェブブラウザの組み合わせにもとづいて、ウェブページの動作テストの方式を決定する。例えば、ウェブブラウザの操作方式およびダイアログの操作方式を決定する。
【０１５１】
外部操作実行部１６４は、図２４におけるＩＥブラウザ操作部５０６に対応する。外部操作実行部１６４は、ＩＤ割当部１７４とダイアログ操作部１７６を含む。ＩＤ割当部１７４は、テスト・プログラムの実行に際して、テスト・プログラムにおいて新規のブラウザウィンドウを生成させる関数（コマンド）が指定されたことを検出すると、そのコマンドの引数として指定されたＩＤをユーザ割当ＩＤとして決定する。ＩＤが未指定の場合は、外部操作実行部１６４および内部操作実行部１６８において一意となる新たなＩＤを、ユーザ割当ＩＤとして採番してもよい。
【０１５２】
ダイアログ操作部１７６は、図２４のＩＥダイアログ操作部５０８に対応し、ＩＥブラウザ５４２によるダイアログの設定を定期的に監視する。例えば、Ｗｉｎ３２ＡＰＩ５５２の上述したＦｉｎｄＷｉｎｄｏｗ関数を定期的にコールして、ダイアログウィンドウが生成されたことを検出してもよい。ダイアログ操作部１７６は、ＩＥブラウザ５４２において表示されたＯＳダイアログ５４４を、Ｗｉｎ３２ＡＰＩ５５２を介して操作する。
【０１５３】
なお、外部操作実行部１６４は、テスト・プログラムで指定されうる、ウェブページ操作用の関数と、ウェブブラウザの操作ＩＦとして規定された関数、参考技術４ではＣＯＭ５５０やＷｉｎ３２ＡＰＩ５５２にて規定された関数との対応関係を格納したテーブルを保持する。外部操作実行部１６４は、当該テーブルを参照して、テスト・プログラムで指定された関数に対応したＣＯＭ５５０やＷｉｎ３２ＡＰＩ５５２の関数をコールする。
【０１５４】
プロキシ処理部１６６は、図２４におけるセレニウムモジュール５３０に対応する。参考技術３において既述したように、プロキシ処理部１６６は、操作対象のウェブページを代理取得する。そして、そのウェブページのプログラムコードに、ＪＡＶＡスクリプトで実装されたプログラムコードであり、ウェブページに対する各種の操作を実行するための予め用意された関数群（参考技術３における「制御コード」）を追加する。そして、制御コード追加後のウェブページをブラウザ処理部１６０に表示させる。また、内部操作実行部１６８からの操作指示に応じて、その操作指示に対応する制御コードの関数を呼び出すことにより、ウェブページの操作を仲介して実行する。
【０１５５】
プロキシ処理部１６６は、ＩＤ発行部１７８とアドオン設定部１７９を含む。ＩＤ発行部１７８は、制御コード追加後のウェブページをブラウザ処理部１６０に表示させる際に、そのブラウザウィンドウをプロキシ処理部１６６において一意に識別するための識別情報を発行する。この識別情報は、ＩＤ取得部１３９によってセレニウム割当ＩＤとして取得される。アドオン設定部１７９は、制御コード追加後のウェブページをブラウザ処理部１６０に表示させるためにＦＦブラウザ５４６を起動すべき際、図２６のウィンドウハンドラ５７２を含むＦＦプロファイル５７０を指定してＦＦブラウザ５４６を起動する。これにより、ＦＦブラウザ５４６の拡張機能としてウィンドウハンドラ５７２を組み込む。
【０１５６】
内部操作実行部１６８は、図２４におけるセレニウムブラウザ操作部５３４に対応する。内部操作実行部１６８は、ＩＤ割当部１８０とダイアログ操作部１８２を含む。ＩＤ割当部１８０は、外部操作実行部１６４のＩＤ割当部１７４と同様の構成である。なお、内部操作実行部１６８は、テスト・プログラムで指定されうるウェブページ操作用の関数と、セレニウムモジュール５３０において規定されたウェブページ操作用の関数との対応関係を格納したテーブルを保持する。外部操作実行部１６４は、当該テーブルを参照して、セレニウムモジュール５３０への操作指示として、テスト・プログラムで指定された関数に対応したセレニウムモジュール５３０の関数をコールする。
【０１５７】
ダイアログ操作部１８２は、図２４のＦＦダイアログ操作部５１６およびＳａｆａｒｉダイアログ操作部５２６に対応する。テスト環境がウィンドウズＯＳおよびＦＦブラウザ５４６の場合、ダイアログ操作部１８２は、ＦＦブラウザ５４６によるダイアログの設定を定期的に監視する。例えば、Ｗｉｎ３２ＡＰＩ５５２の上述したＦｉｎｄＷｉｎｄｏｗ関数を定期的にコールして、ダイアログウィンドウが生成されたことを検出してもよい。ダイアログ操作部１８２は、ＦＦブラウザ５４６において表示されたＯＳダイアログ５４４を、Ｗｉｎ３２ＡＰＩ５５２を介して操作する。また、ダイアログ操作部１８２は、ＦＦブラウザ５４６により表示されたＦＦダイアログ５４８を、ＦＦプラグイン５５４を介して検出し、ＦＦプラグイン５５４を介して操作する。
【０１５８】
またテスト環境がＭａｃＯＳおよびＳａｆａｒｉブラウザ５６２である場合、ダイアログ操作部１８２は、Ｓａｆａｒｉブラウザ５６２によるダイアログの設定を定期的に監視する。例えば、上述のＡｐｐｌｅスクリプトを定期的に実行して、Ｓａｆａｒｉブラウザ５６２におけるダイアログウィンドウの設定を検出してもよい。ダイアログ操作部１８２は、Ｓａｆａｒｉブラウザ５６２において表示されたＳａｆａｒｉダイアログ５６４を、アクセシビリティＡＰＩ５６６を介して操作する。
【０１５９】
以上の構成による動作を以下説明する。
図３０は、動作検証装置１００の動作を示すフローチャートである。同図は、動作検証装置１００において動作テスト用プログラムが実行される際の動作を示すものである。例えば、図１２におけるＳ２１８の詳細を示すものであり、図１４におけるＳ２２８の詳細を示すものでもある。すなわち、図１４で示したように、動作検証装置１００は、ウェブページに対して事前にユーザが実施した一連の入力操作を再現することで、ウェブページの動作確認を支援する。なお、図３０は、図２３のフローチャートをより詳細化したものとも言える。
【０１６０】
ウェブページの動作テストの開始指示をユーザから受け付けると、テスト環境判定部１７１は、動作テストの実行環境となるＯＳおよびウェブブラウザの種別を判定する。そして、その判定結果に応じて、ウェブページの操作主体として外部操作実行部１６４または内部操作実行部１６８を選択する（Ｓ４００）。プログラム実行部１３４、言い換えれば操作主体として選択された外部操作実行部１６４または内部操作実行部１６８は、後述するテスト・プログラム読込処理を実行する（Ｓ４０２）。テスト・プログラムに記述されたウェブページに対する全操作（動作テストの全項目）が完了した場合（Ｓ４０４のＹ）、本図のフローを終了する。
【０１６１】
テスト・プログラムの一例として、ここでは、以下の操作１〜操作１０の操作コマンドが記述されたテスト・プログラムを想定する。
（操作１）ブラウザウィンドウＡ（ＩＤ＝１を指定）をオープン
（操作２）ブラウザウィンドウＢ（ＩＤ＝２を指定）をオープン
（操作３）ブラウザウィンドウＡを選択（ＩＤ＝１を指定）
（操作４）ブラウザウィンドウＡに表示されたウェブページに対する操作
（操作５）ブラウザウィンドウＡに表示されたウェブページに対する操作
（操作６）操作５により表示されたダイアログに対する操作
（操作７）ブラウザウィンドウＢを選択（ＩＤ＝２を指定）
（操作８）ブラウザウィンドウＢに表示されたウェブページに対する操作
（操作９）ブラウザウィンドウＡをクローズ（ＩＤ＝１を指定）
（操作１０）ブラウザウィンドウＢをクローズ（ＩＤ＝２を指定）
【０１６２】
このテスト・プログラムは、図１４で示した一連の処理で設定された動作テスト用プログラムである。この場合の操作内容ファイルには、操作１および操作２を指定する関数として「ｗａｉｔＦｏｒＮｅｗＷｉｎｄｏｗ」が指定され、その引数としてウェブページのＵＲＬとユーザ指定のＩＤが設定される。また操作３および操作７を指定する関数として「ｓｅｌｅｃｔＷｉｎｄｏｗ」が指定され、その引数としてユーザ指定のＩＤが設定される。また操作４、操作５、および操作８を指定する関数として、ＷｅｂＥｄｉｔＳｅｔやＷｅｂＥｌｅｍｅｎｔＣｌｉｃｋ等、各種の操作用の関数が指定される。また操作６を指定する関数として、ダイアログ操作用の所定の関数が指定される。
【０１６３】
テスト・プログラムの実行においては、テスト・プログラムに記述された操作コマンドが順次実行される。テスト・プログラムにおいて未実行の操作コマンドが残存しており（Ｓ４０４のＮ）、テスト・プログラムにおいて新たなウェブページの表示が要求された場合、すなわち上記の操作１および操作２を実行すべき場合（Ｓ４０６のＹ）、操作主体として選択された外部操作実行部１６４または内部操作実行部１６８のＩＤ割当部は、その操作コマンドで指定されたＩＤをユーザ割当ＩＤとして割り当てる。ＩＤ取得部１３９は、そのユーザ割当ＩＤを取得し、ウィンドウＩＤ保持部１５４へ格納する（Ｓ４０８）。
【０１６４】
ウェブブラウザの操作ＩＦが公開されている場合（Ｓ４１０のＹ）、外部操作実行部１６４は、その操作ＩＦを呼び出すことにより、操作対象のウェブページのデータをウェブブラウザに取得させる（Ｓ４１２）。そして、操作対象のウェブページを表示したブラウザウィンドウをディスプレイ上に表示させる（Ｓ４２０）。図２４においてＳ４１０のＹとなるのは、ウェブブラウザがＩＥブラウザ５４２の場合であり、このときの操作ＩＦにはＣＯＭ５５０が対応する。
【０１６５】
ウェブブラウザの操作ＩＦが非公開の場合（Ｓ４１０のＮ）、内部操作実行部１６８は、プロキシ処理部１６６に対して、操作対象のウェブページの取得を指示する。プロキシ処理部１６６のＩＤ発行部１７８は、セレニウム割当ＩＤを発行する（Ｓ４１４）。プロキシ処理部１６６は、操作対象のウェブページのデータを取得し（Ｓ４１６）、当該ウェブページのデータに制御コードを追加する（Ｓ４１８）。プロキシ処理部１６６は、後述するウェブブラウザ起動処理を実行後（Ｓ４１９）、制御コードを追加したウェブページのデータをウェブブラウザに渡し、操作対象のウェブページを表示するブラウザウィンドウをディスプレイ上に表示させる（Ｓ４２０）。図２４においてＳ４１０のＮとなるのは、ウェブブラウザがＦＦブラウザ５４６またはＳａｆａｒｉブラウザ５６２の場合である。
【０１６６】
ＩＤ取得部１３９は、ＯＳが提供するＡＰＩをコールし、ブラウザウィンドウに対してＯＳが割り当てたＯＳ割当ＩＤを取得してウィンドウＩＤ保持部１５４へ格納する。また、ウェブブラウザの操作ＩＦが非公開の場合は、セレニウムモジュール５３０が提供するＡＰＩをコールし、ブラウザウィンドウに対してセレニウムモジュール５３０が割り当てたセレニウム割当ＩＤを取得してウィンドウＩＤ保持部１５４へ格納する。これにより、ブラウザウィンドウＡとブラウザウィンドウＢのそれぞれに割り当てられたユーザ割当ＩＤとＯＳ割当ＩＤとセレニウム割当ＩＤとを対応づける（Ｓ４２２）。
【０１６７】
テスト・プログラムにおいて新たなウェブページの表示が指定されなければ（Ｓ４０６のＮ）、Ｓ４０８〜Ｓ４２２はスキップされる。テスト・プログラムにおいてウェブページの操作が指定された場合、すなわち上記の操作３〜操作１０を実行すべき場合（Ｓ４２４のＹ）、プログラム実行部１３４は後述するウェブページ操作処理を実行する（Ｓ４２６）。テスト・プログラムにおいてウェブページの操作が指定されなければ（Ｓ４２４のＮ）、Ｓ４２６はスキップされる。ウェブページに対する操作の後、証左物設定部１７０は、画面スナップショット等の証左物のデータを結果保持部１５２へ格納し（Ｓ４２８）、Ｓ４０４へ戻る。
【０１６８】
なお、証左物設定部１７０は、証左物としての、ブラウザウィンドウに関する画面スナップ等の証左物を、そのブラウザウィンドウに対して割り当てられたユーザ割当ＩＤと対応づけて記録することが望ましい。これにより、ウェブページの動作テストの結果を確認するユーザに、自身が指定したＩＤと対応づけられた証左物を確認させることができ、証左物の確認におけるユーザの利便性を高めることができる。
【０１６９】
図３１は、図３０のＳ４０２のテストプログラム読込処理を詳細に示すフローチャートである。プログラム実行部１３４は、動作テスト用プログラムを読み込む（Ｓ４３０）。そのプログラムにおいてダイアログ操作を示す所定関数が指定されている場合（Ｓ４３２のＹ）、プログラム実行部１３４は、そのダイアログ操作の内容（上記の操作６）を所定のダイアログ操作保持テーブルに格納する（Ｓ４３４）。ダイアログ操作の指定がなければ（Ｓ４３２のＮ）、Ｓ４３４はスキップされる。
【０１７０】
図３２は、図３０のＳ４１９のウェブブラウザ起動処理を詳細に示すフローチャートである。プロキシ処理部１６６は、動作テストのためのウェブブラウザを起動する（Ｓ４４０）。動作テスト用のウェブブラウザがＦＦブラウザ５４６である場合（Ｓ４４２のＹ）、アドオン設定部１７９は、ＦＦブラウザ５４６の拡張機能としてウィンドウハンドラ５７２をアドオンする（Ｓ４４４）。ウィンドウハンドラ５７２は、ＦＦダイアログ５４８を検出するためのリスナをＦＦブラウザ５４６に登録する（Ｓ４４６）。動作テスト用のウェブブラウザがＦＦブラウザ５４６でなければ（Ｓ４４２のＮ）、Ｓ４４４およびＳ４４６はスキップされる。
【０１７１】
図３３は、図３０のＳ４２６のウェブページ操作処理を詳細に示すフローチャートである。テスト環境判定部１７１における判定結果においてＯＳがＭａｃＯＳである場合（Ｓ４５０のＹ）、内部操作実行部１６８が後述のＭａｃ用操作処理を実行する（Ｓ４５２）。ＯＳがＭａｃＯＳでなければ（Ｓ４５０のＮ）、Ｓ４５２はスキップされる。ＯＳがＷｉｎｄｏｗｓであり（Ｓ４５４のＹ）、ウェブブラウザがＩＥブラウザ５４２である場合（Ｓ４５６のＹ）、外部操作実行部１６４が後述のＩＥ用操作処理を実行する（Ｓ４５８）。ウェブブラウザがＩＥブラウザ５４２でなく（Ｓ４５６のＮ）、ＦＦブラウザ５４６である場合（Ｓ４６０のＹ）、内部操作実行部１６８が後述のＦＦ用操作処理を実行する（Ｓ４６２）。ウェブブラウザがＦＦブラウザ５４６でもなければ（Ｓ４６０のＮ）、Ｓ４６２はスキップされ、ＯＳがＷｉｎｄｏｗｓでもなければ（Ｓ４５４のＮ）、Ｓ４５６以降はスキップされる。
【０１７２】
図３４は、図３３のＳ４５２のＭａｃ用操作処理を詳細に示すフローチャートである。テスト・プログラムにおいてウィンドウ選択操作（上記の操作３および７）が指定された場合（Ｓ４７０のＹ）、内部操作実行部１６８のＩＤ割当部１８０は、引数で受け付けたＩＤをユーザ割当ＩＤとして特定する（Ｓ４７２）。ウィンドウ選択操作でなく（Ｓ４７０のＮ）、Ｓａｆａｒｉブラウザ５６２を介して実行すべき所定の操作（上記の操作４、５および８、以下「ブラウザ操作」とも呼ぶ）が指定された場合（Ｓ４７４のＹ）、内部操作実行部１６８は、ユーザ割当ＩＤと対応づけられたセレニウム割当ＩＤを特定する（Ｓ４７６）。そして、そのセレニウム割当ＩＤを指定した操作指示をセレニウムモジュール５３０へ通知することにより、ウェブページに追加された制御コードのうち操作指示に対応する関数をセレニウムモジュール５３０に呼び出させる（Ｓ４７８）。
【０１７３】
ブラウザ操作でなく（Ｓ４７４のＮ）、ＭａｃＯＳを介して実行すべき所定の操作（上記の操作９および１０、以下「ＯＳ操作」とも呼ぶ）が指定された場合（Ｓ４８０のＹ）、内部操作実行部１６８は、ユーザ割当ＩＤと対応づけられたＯＳ割当ＩＤを特定する（Ｓ４８２）。そして、そのＯＳ割当ＩＤを指定して、操作内容に対応するアクセシビリティＡＰＩ５６６の関数を呼び出すことにより、ブラウザウィンドウに対するＯＳ操作をＭａｃＯＳに実行させる（Ｓ４８４）。ＯＳ操作でもなければ（Ｓ４８０のＮ）、Ｓ４８２およびＳ４８４はスキップされる。
【０１７４】
内部操作実行部１６８のダイアログ操作部１８２は、Ｓａｆａｒｉダイアログ５６４の表示を検出すると（Ｓ４８６のＹ）、そのダイアログに対する操作内容（上記の操作６）をダイアログ操作保持テーブルから取得する（Ｓ４８８）。そして、その操作内容に対応するアクセシビリティＡＰＩ５６６の関数をコールすることにより、Ｓａｆａｒｉダイアログ５６４に対する操作を実行する（Ｓ４９０）。Ｓａｆａｒｉダイアログ５６４の表示が未検出であれば（Ｓ４８６のＮ）、Ｓ４８８およびＳ４９０はスキップされる。
【０１７５】
図３５は、図３３のＳ４５８のＩＥ用操作処理を詳細に示すフローチャートである。テスト・プログラムにおいてウィンドウ選択操作（上記の操作３および７）が指定された場合（Ｓ５００のＹ）、外部操作実行部１６４のＩＤ割当部１７４は、引数で受け付けたＩＤをユーザ割当ＩＤとして特定する（Ｓ５０２）。ウィンドウ選択操作でなく（Ｓ５００のＮ）、ＩＥブラウザ５４２を介して実行すべき操作（上記の操作４、５および８、以下「ブラウザ操作」とも呼ぶ）が指定された場合（Ｓ５０４のＹ）、外部操作実行部１６４は、ユーザ割当ＩＤと対応づけられたＯＳ割当ＩＤを特定する（Ｓ５０６）。そして、そのＯＳ割当ＩＤを指定して、ブラウザ操作の内容に対応するＣＯＭ５５０の関数を呼び出すことにより、当該操作をＩＥブラウザ５４２に実行させる（Ｓ５０８）。
【０１７６】
ブラウザ操作でなく（Ｓ５０４のＮ）、ＷｉｎｄｏｗｓＯＳを介して実行すべき操作（上記の操作９および１０、以下「ＯＳ操作」とも呼ぶ）が指定された場合（Ｓ５１０のＹ）、外部操作実行部１６４は、ユーザ割当ＩＤと対応づけられたＯＳ割当ＩＤを特定する（Ｓ５１２）。そして、そのＯＳ割当ＩＤを指定して、操作内容に対応するＷｉｎ３２ＡＰＩ５５２の関数を呼び出すことにより、ブラウザウィンドウに対するＯＳ操作をＷｉｎｄｏｗｓＯＳに実行させる（Ｓ５１４）。ＯＳ操作でもなければ（Ｓ５１０のＮ）、Ｓ５１２およびＳ５１４はスキップされる。
【０１７７】
外部操作実行部１６４のダイアログ操作部１７６は、ＯＳダイアログ５４４の表示を検出すると（Ｓ５１６のＹ）、そのダイアログに対する操作内容（上記の操作６）をダイアログ操作保持テーブルから取得する（Ｓ５１８）。そして、その操作内容に対応するＷｉｎ３２ＡＰＩ５５２の関数をコールすることにより、ＯＳダイアログ５４４に対する操作を実行する（Ｓ５２０）。ＯＳダイアログ５４４の表示が未検出であれば（Ｓ５１６のＮ）、Ｓ５１８およびＳ５２０はスキップされる。
【０１７８】
図３６は、図３３のＳ４６２のＦＦ用操作処理を詳細に示すフローチャートである。テスト・プログラムにおいてウィンドウ選択操作（上記の操作３および７）が指定された場合（Ｓ５３０のＹ）、内部操作実行部１６８のＩＤ割当部１８０は、引数で受け付けたＩＤをユーザ割当ＩＤとして特定する（Ｓ５３２）。ウィンドウ選択操作でなく（Ｓ５３０のＮ）、ＦＦブラウザ５４６を介して実行すべき所定の操作（上記の操作４、５および８、以下「ブラウザ操作」とも呼ぶ）が指定された場合（Ｓ５３４のＹ）、内部操作実行部１６８は、ユーザ割当ＩＤと対応づけられたセレニウム割当ＩＤを特定する（Ｓ５３６）。そして、そのセレニウム割当ＩＤを指定した操作指示をセレニウムモジュール５３０に通知することにより、ウェブページに追加された制御コードのうち操作指示に対応する関数をセレニウムモジュール５３０に呼び出させる（Ｓ５３８）。
【０１７９】
ブラウザ操作でなく（Ｓ５３４のＮ）、ＷｉｎｄｏｗｓＯＳを介して実行すべき所定の操作（上記の操作９および１０、以下「ＯＳ操作」とも呼ぶ）が指定された場合（Ｓ５４０のＹ）、内部操作実行部１６８は、ユーザ割当ＩＤと対応づけられたＯＳ割当ＩＤを特定する（Ｓ５４２）。そして、そのＯＳ割当ＩＤを指定して、操作内容に対応するＷｉｎ３２ＡＰＩ５５２の関数を呼び出すことにより、ブラウザウィンドウに対するＯＳ操作をＷｉｎｄｏｗｓＯＳに実行させる（Ｓ５４４）。ＯＳ操作でもなければ（Ｓ５４０のＮ）、Ｓ５４２およびＳ５４４はスキップされる。
【０１８０】
当段落では、上記操作５により表示されたダイアログがＦＦダイアログ５４８であるとして説明する。内部操作実行部１６８のダイアログ操作部１８２は、ウィンドウハンドラ５７２からの通知により、ＦＦダイアログ５４８の表示を検出すると（Ｓ５４６のＹ）、そのダイアログに対する操作内容（上記の操作６）をダイアログ操作保持テーブルから取得する（Ｓ５４８）。そして、その操作内容をウィンドウハンドラ５７２へ通知することにより、その操作内容に対応するＦＦブラウザ５４６の関数をウィンドウハンドラ５７２に呼び出させる（Ｓ５５０）。これにより、ＦＦダイアログ５４８に対する、テスト・プログラムにしたがった操作を実行する。ＦＦダイアログ５４８の表示が未検出であれば（Ｓ５４６のＮ）、Ｓ５４８およびＳ５５０はスキップされる。
【０１８１】
当段落では、上記操作５により表示されたダイアログがＯＳダイアログ５４４であるとして説明する。内部操作実行部１６８のダイアログ操作部１８２は、ＯＳダイアログ５４４が表示されたことを検出すると（Ｓ５５２のＹ）、そのダイアログに対する操作内容（上記の操作６）をダイアログ操作保持テーブルから取得する（Ｓ５５４）。そして、その操作内容に対応するＷｉｎ３２ＡＰＩ５５２の関数をコールすることにより、ＯＳダイアログ５４４に対する操作を実行する（Ｓ５５６）。ＯＳダイアログ５４４の表示が未検出であれば（Ｓ５５２のＮ）、Ｓ５５４およびＳ５５６はスキップされる。
【０１８２】
参考技術４の動作検証装置１００によれば、参考技術３において既述したように、セレニウムモジュール５３０を使用することで、操作ＩＦの公開有無によらず、様々なウェブブラウザ上でのウェブページの動作確認が可能になる。また、テスト・プログラム、およびテストプログラムの生成元となる操作内容ファイルや関数設定画面において、ユーザは任意のＩＤをブラウザウィンドウに対して付与できる。すなわち、ユーザは、テストの都合に応じてブラウザウィンドウのＩＤを適宜設定できる一方で、セレニウムモジュール５３０がブラウザウィンドウを識別するために必要なセレニウム割当ＩＤを意識する必要がなく、ユーザの利便性を向上できる。
【０１８３】
また動作検証装置１００によれば、セレニウムモジュール５３０を介さずに行うべきブラウザウィンドウへの操作もサポートできる。この場合も、ユーザは、テストの都合に応じてブラウザウィンドウのＩＤを任意に設定できる一方で、ＯＳやウェブブラウザがそのブラウザウィンドウに対して割り当てたＩＤを意識する必要がなく、ユーザの利便性を向上できる。
【０１８４】
さらに動作検証装置１００によれば、ウェブブラウザ（ＦＦブラウザ５４６）の拡張機能として、ダイアログ検出機能をアドオンする。これにより、ウェブブラウザが独自のリソースを使用してダイアログを表示するためにＯＳの機能ではダイアログの内容を取得できない場合でも、アドオンしたダイアログ検出機能を介して、ダイアログの内容を取得し、当該ダイアログを操作できる。また、ウェブブラウザが独自のリソースを使用した第１ダイアログと、ＯＳのネイティブリソースを使用した第２ダイアログの両方を生成しうる場合も、ダイアログ操作の方式を適宜切り替えることにより、いずれのダイアログに対する操作も可能にする。すなわち、第１ダイアログに対してはアドオンしたダイアログ検出機能を介して操作し、第２ダイアログに対してはＯＳのネイティブ機能を介して操作することで、ウェブページに対する一連の操作をサポートして、再現できる。
【０１８５】
さらにまた動作検証装置１００によれば、ブラウザウィンドウに対する多くの操作においてセレニウムモジュール５３０を利用しつつ、例外的な操作ではＯＳのＡＰＩを直接呼び出し、または、ダイアログ操作用のモジュールを利用する。このように、参考技術４で説明した技術を適宜組み合わせることにより、参考技術４では言及しなかった様々なテスト環境（すなわちＯＳとウェブブラウザとの組み合わせ）もサポートでき、ウェブページの動作テストを支援できる。
【０１８６】
（第１の実施の形態）
本発明の第１の実施の形態（以下、「第１実施形態」とも呼ぶ。）の動作検証装置１００に関して、その概要を説明する。図３７は、ブラウザウィンドウにおけるウェブコンテンツの表示例を示す。同図は、ウェブサーバから提供されたウェブページ（典型的にはテスト対象ページ）が、ディスプレイの画面６３０上でブラウザウィンドウ６３２に表示された状況を示している。第１実施形態では、ブラウザウィンドウにおいて起動されるウェブブラウザはＳａｆａｒｉブラウザ５６２である。
【０１８７】
ブラウザウィンドウ６３２は、クライアント領域６３４とヘッダ領域６３６とを含む。ヘッダ領域６３６は、主に、Ｓａｆａｒｉブラウザ５６２に関する情報が表示される領域であり、Ｓａｆａｒｉブラウザ５６２を操作するための各種のメニューやアイコンが表示される。また、ウェブページの内容そのものではなく、ＵＲＬやタイトル等、ウェブページのメタ情報が表示される。
【０１８８】
その一方で、クライアント領域６３４は、ウェブページの内容そのものが表示される領域である。クライアント領域６３４は、それぞれが異なるウェブページを表示する複数のフレームを含む。第１実施形態では、フレームａ６３８、フレームｂ６４０およびフレームｃ６４２を含むこととする。また、ブラウザウィンドウ６３２において、ヘッダ領域６３６は、クライアント領域６３４の上部に配置されることとする。
【０１８９】
フレームａ６３８は、非表示部分を含む全体の縦の長さが、可視範囲の縦の長さを超過するため、縦スクロールバー６４６が配置される。またフレームａ６３８は、エレメント６４４を含む。第１実施形態における「エレメント」は、フレーム内に配置されて、スクロールバーが設定されうるＧＵＩコンポーネントであり、例えばテキストボックスやリストボックスを含む。同図のエレメント６４４は、非表示部分を含む全体の縦の長さが、可視範囲の縦の長さを超過するため、縦スクロールバー６４５が配置される。フレームｂ６４０は、非表示部分を含む全体の横の長さが、可視範囲の横の長さを超過するため、横スクロールバー６５０が配置される。またフレームｂ６４０は、テーブル６４８を含む。
【０１９０】
第１実施形態の動作検証装置１００は、ブラウザウィンドウ６３２の表示画像をキャプチャする際に、フレーム単位に１枚の画像データとして保存する。すなわち、複数のフレームにより構成されるウェブページ、言い換えれば、複数のウェブページをフレーム分割して表示するウェブページ（以下、便宜的に「トップページ」とも呼ぶ。）の画面キャプチャにおいては、フレームごとのキャプチャ画像を保存する。また、ブラウザウィンドウ６３２においてフレーム全体の内容を一時に表示できず、スクロールが必要な場合、フレームの一部分をそれぞれ含む複数の画像データを取得し、それらを連結させた画像データを最終的なキャプチャ画像として保存する。
【０１９１】
図３８は、図３７のブラウザウィンドウのキャプチャ画像を示す。図３８の（ａ）は、フレームａ６３８のキャプチャ画像を示している。第１実施形態の画像キャプチャ処理では、図３７で非表示とされた領域を含むフレームａ６３８の全体が１枚の画像として保存される。また図３８の（ｂ）は、フレームａ６３８内のエレメント６４４のキャプチャ画像を示している。第１実施形態の画像キャプチャ処理では、図３７で非表示とされた領域を含むエレメント６４４の全体が１枚の画像として保存される。また図３８の（ｃ）は、フレームｂ６４０のキャプチャ画像であり、図３７では非表示とされた領域を含むフレームｂ６４０の全体が１枚の画像として保存される。また図３８では図示しないが、フレームｃ６４２のキャプチャ画像も取得される。フレームｃ６４２にはスクロールバーが未配置であるため、図３７での表示内容を示すキャプチャ画像が取得されることになる。
【０１９２】
以下では、表示画像をキャプチャすべきブラウザウィンドウを「キャプチャ対象ウィンドウ」、キャプチャ対象ウィンドウに含まれるフレームを「キャプチャ対象フレーム」、キャプチャ対象フレームに含まれるエレメントを「キャプチャ対象エレメント」と呼ぶ。また、トップページにおいて個々のフレーム内に表示されるウェブページを「フレームページ」と呼ぶ。
【０１９３】
第１実施形態における動作検証装置１００の主な機能構成は、図２８および図２９で示した参考技術４における動作検証装置１００の機能構成と同様である。以下、参考技術１〜４において説明済の構成はその説明を適宜省略し、ウェブコンテンツの画面キャプチャ処理のための構成を詳細に説明する。
【０１９４】
図３９は、第１実施形態における画面キャプチャ処理に関する機能構成を示すブロック図である。既述したように、動作検証装置１００は、証左物設定部１７０とプロキシ処理部１６６とブラウザ処理部１６０を備える。証左物設定部１７０は、プロキシ処理部１６６が提供する後述の各種関数を呼び出す。プロキシ処理部１６６は、ウェブページのプログラムコードに追加した制御コードと適宜通信して、証左物設定部１７０により呼び出された関数に対応するＪＡＶＡスクリプトをブラウザ処理部１６０側で実行させる。すなわち、証左物設定部１７０はプロキシ処理部１６６が提供する各種関数を利用してウェブページを操作し、また、ウェブページの画像キャプチャに必要な情報をブラウザ処理部１６０やプロキシ処理部１６６から取得する。
【０１９５】
図４０は、プロキシ処理部１６６が証左物設定部１７０に提供する関数を示す。これらの関数は、言い換えれば、図２４のセレニウムモジュール５３０が外部に公開する関数であるとも言える。なお同図の、「ｇｅｔＯｆｆｓｅｔＰｏｓｉｔｉｏｎＯｆＷｉｎｄｏｗ」以外の関数は、プロキシ処理部１６６、すなわちセレニウムモジュール５３０が標準的に提供する関数であってもよい。
【０１９６】
第１実施形態のプロキシ処理部１６６は、Ｓａｆａｒｉブラウザ５６２に表示させるべきトップページを代理取得し、トップページに制御コードを追加する。また、トップページのフレームに表示させるべきフレームページも代理取得して、各フレームページにも制御コードを追加する。その際に、ウェブページを表示したブラウザウィンドウに一意のＩＤを割り当てるとともに、そのウェブページで表示された各フレームにもＩＤを割り当てる。そして、ウィンドウに割り当てたＩＤと、フレームに割り当てたＩＤとを対応付けて管理する。
【０１９７】
図３９に戻り、プロキシ処理部１６６は、画像位置特定部６００を含む。証左物設定部１７０は、対象特定部６１２と、フレーム処理部６１４と、エレメント処理部６１９と、画像取得部６２５と、画像合成部６２７とを含む。同図の各機能ブロックは、ウェブコンテンツの画面キャプチャ処理を実行するための機能ブロックとして、包括的に、画面キャプチャ処理部６２９とも呼ぶことができる。なお、画面キャプチャ処理部６２９の各機能ブロックは、プロキシ処理部１６６が証左物設定部１７０に提供する関数の機能に応じて、プロキシ処理部１６６に配置されてもよく、証左物設定部１７０に配置されてもよい。
【０１９８】
プロキシ処理部１６６：
画像位置特定部６００は、図４０の関数「ｇｅｔＯｆｆｓｅｔＰｏｓｉｔｉｏｎＯｆＷｉｎｄｏｗ」の機能を実現する。すなわち、上記関数の引数で指定されたフレーム（キャプチャ対象フレーム）について、画面６３０上における表示位置を導出して、その表示位置を示す情報を証左物設定部１７０へ通知する。画像位置特定部６００は、ウィンドウ表示位置取得部６０２と、ヘッダ領域特定部６０４と、クライアント領域特定部６０６と、フレーム相対位置取得部６０８と、フレーム表示位置特定部６１０とを含む。
【０１９９】
ウィンドウ表示位置取得部６０２は、キャプチャ対象フレームが表示されたブラウザウィンドウ６３２の、画面６３０上における表示位置を取得する。第１実施形態では、画面６３０の左上端を原点とする直交座標系における座標であり、ブラウザウィンドウの左上端（図３７のポイント６５９）の座標を取得する。
【０２００】
具体的には、ウィンドウ表示位置取得部６０２は、キャプチャ対象フレームを含むトップページの制御コードと通信して、トップページにて「ｗｉｎｄｏｗ．ｓｃｒｅｅｎＸ」を実行させる。そして戻り値として、ポイント６５９の横座標値（図３７の横座標６５２）を取得する。同様に、トップページにて「ｗｉｎｄｏｗ．ｓｃｒｅｅｎＹ」を実行させて、戻り値として、ポイント６５９の縦座標値（図３７の縦座標６５４）を取得する。
【０２０１】
ヘッダ領域特定部６０４は、ブラウザウィンドウ６３２におけるヘッダ領域６３６のサイズを特定する。第１実施形態においては、ヘッダ領域６３６がクライアント領域６３４の上部に配置されるため、ヘッダ領域特定部６０４はヘッダ領域６３６の縦の長さを特定する。
【０２０２】
具体的には、ヘッダ領域特定部６０４は、キャプチャ対象フレームを含むトップページの制御コードと通信して、トップページにて「ｗｉｎｄｏｗ．ｏｕｔｅｒＨｅｉｇｈｔ」を実行させる。そして戻り値として、ブラウザウィンドウ６３２の縦の長さ（図３７の縦幅６５６）を取得する。同様に、トップページにて「ｗｉｎｄｏｗ．ｉｎｎｅｒＨｅｉｇｈｔ」を実行させて、戻り値として、クライアント領域６３４の縦の長さ（図３７の縦幅６５８）を取得する。ヘッダ領域特定部６０４は、ブラウザウィンドウ６３２の縦の長さから、クライアント領域６３４の縦の長さを減算することにより、ヘッダ領域６３６の縦の長さを導出する。
【０２０３】
クライアント領域特定部６０６は、画面６３０上におけるブラウザウィンドウ６３２の表示位置とヘッダ領域６３６のサイズとにしたがって、画面６３０上におけるクライアント領域６３４の表示位置を特定する。具体的には、ブラウザウィンドウ６３２の左上端（ポイント６５９）の座標の縦座標値に、ヘッダ領域６３６の縦の長さを加算する一方、ポイント６５９の座標の横座標値はそのまま用いて、クライアント領域６３４の左上端（ポイント６６０）の座標を導出する。
【０２０４】
フレーム相対位置取得部６０８は、クライアント領域６３４におけるキャプチャ対象フレームの位置を取得する。第１実施形態では、クライアント領域６３４の左上端（図３７のポイント６６０）を原点とする直交座標系における座標であり、キャプチャ対象フレームの左上端の座標（以下、「クライアント領域内座標」とも呼ぶ。）を取得する。例えば、キャプチャ対象フレームがフレームｂ６４０である場合、図３７のポイント６６２のクライアント領域内座標を取得する。
【０２０５】
具体的には、フレーム相対位置取得部６０８は、キャプチャ対象フレームを含むトップページの制御コードと通信して、トップページにて「フレーム名．ｆｒａｍｅＥｌｅｍｅｎｔ．ｏｆｆｓｅｔＬｅｆｔ」を実行させる。そして戻り値として、キャプチャ対象フレームのクライアント領域内座標の横座標値を取得する。同様に、トップページにて「フレーム名．ｆｒａｍｅＥｌｅｍｅｎｔ．ｏｆｆｓｅｔＴｏｐ」を実行させ、戻り値として、キャプチャ対象フレームのクライアント領域内座標の縦座標値を取得する。
【０２０６】
フレーム表示位置特定部６１０は、クライアント領域特定部６０６により導出された画面６３０上におけるクライアント領域６３４の表示位置と、クライアント領域６３４におけるキャプチャ対象フレームの位置とにしたがって、画面６３０上におけるキャプチャ対象フレームの表示位置を特定する。具体的には、クライアント領域６３４の左上端座標の縦座標値および横座標値に、キャプチャ対象フレームのクライアント領域内座標の縦座標値および横座標値を加算することにより、キャプチャ対象フレームの左上端の座標（画面６３０上における座標）を導出する。
【０２０７】
証左物設定部１７０：
対象特定部６１２は、画面６３０に表示されたウェブコンテンツのうち、画像キャプチャを行うべき対象コンテンツを決定する。具体的には、キャプチャ対象ウィンドウと、キャプチャ対象フレームと、キャプチャ対象エレメントとを順次特定する。
【０２０８】
第１実施形態において、ユーザは、関数設定画面２１０において画面キャプチャ関数（例えば図７の「ＷｅｂＳｃｒｅｅｎ  Ｃａｐｔｕｒｅ」）を設定し、その引数として、キャプチャすべきブラウザウィンドウのユーザ割当ＩＤを設定する。対象特定部６１２は、画面キャプチャ関数の引数で指定されたユーザ割当ＩＤに対応するブラウザウィンドウをキャプチャ対象ウィンドウとして識別する。
【０２０９】
また対象特定部６１２は、画面キャプチャ関数の引数で指定されたユーザ割当ＩＤに対応するセレニウム割当ＩＤを指定して、関数「ｇｅｔＡｌｌＦｒａｍｅ」を呼び出す。そして、キャプチャ対象ウィンドウに含まれるフレームの一覧情報（以下、「フレームリスト」とも呼ぶ。）をプロキシ処理部１６６から取得する。このフレームリストには、キャプチャ対象ウィンドウに含まれる各フレームに対してセレニウムモジュール５３０が割り当てた、各フレームのＩＤ（以下、「フレームＩＤ」とも呼ぶ。）が含まれる。対象特定部６１２は、フレームリストに含まれる各フレームをキャプチャ対象フレームとして識別する。
【０２１０】
また対象特定部６１２は、キャプチャ対象フレームのそれぞれのＩＤを指定して、関数「ｇｅｔＳｃｒｏｌｌａｂｌｅＥｌｅｍｅｎｔ」を呼び出す。そして、キャプチャ対象フレームに含まれるスクロール可能なエレメントの一覧情報（以下、「エレメントリスト」とも呼ぶ。）をプロキシ処理部１６６から取得する。このエレメントリストには、キャプチャ対象フレームに含まれるスクロール可能な各エレメントのＩＤ（以下、「エレメントＩＤ」とも呼ぶ。）が含まれる。対象特定部６１２は、エレメントリストに含まれる各エレメントをキャプチャ対象エレメントとして特定する。
【０２１１】
フレーム処理部６１４は、キャプチャ対象フレームをキャプチャするための準備処理を実行する。フレーム処理部６１４は、フレーム表示位置取得部６１５と、フレーム範囲取得部６１６と、フレームスクロール処理部６１７とを含む。
【０２１２】
フレーム表示位置取得部６１５は、キャプチャ対象フレームのフレームＩＤを指定して、関数「ｇｅｔＯｆｆｓｅｔＰｏｓｉｔｉｏｎＯｆＷｉｎｄｏｗ」を呼び出す。これにより、プロキシ処理部１６６の画像位置特定部６００に、画面６３０上におけるキャプチャ対象フレームの表示位置を示す座標を特定させ、その座標値をプロキシ処理部１６６から取得する。
【０２１３】
フレーム範囲取得部６１６は、キャプチャ対象フレームのフレームＩＤを指定して、関数「ｇｅｔＳｃｒｏｌｌＲｅｃｔａｎｇｌｅＯｆＥｌｅｍｅｎｔ」を呼び出す。そして、キャプチャ対象フレームの不可視部分、言い換えれば、スクロールをさせることにより初めて画面６３０上で表示される部分を含む全体サイズ、ここではキャプチャ対象フレーム全体の横の長さ（横幅）と縦の長さ（縦幅）をプロキシ処理部１６６から取得する。
【０２１４】
なお、プロキシ処理部１６６は、関数「ｇｅｔＳｃｒｏｌｌＲｅｃｔａｎｇｌｅＯｆＥｌｅｍｅｎｔ」の呼び出しを受け付けたとき、ブラウザ処理部１６０の種類に応じて異なるＪＡＶＡスクリプトをトップページで実行させてもよい。すなわち、第１実施形態のようにＳａｆａｒｉブラウザ５６２の場合、「フレーム名．ｄｏｃｕｍｅｎｔ．ｗｉｄｔｈ」の実行結果を、キャプチャ対象フレーム全体の横幅として特定してもよい。同様に、「フレーム名．ｄｏｃｕｍｅｎｔ．ｈｅｉｇｈｔ」の実行結果を、キャプチャ対象フレーム全体の縦幅として特定してもよい。その一方で、ブラウザ処理部１６０がＦＦブラウザ５４６の場合、「フレーム名．ｗｉｎｄｏｗ．ｉｎｎｅｒＷｉｄｔｈ」の実行結果＋「フレーム名．ｗｉｎｄｏｗ．ｓｃｒｏｌｌＭａｘＸ」の実行結果を、キャプチャ対象フレーム全体の横幅として特定してもよい。同様に、「フレーム名．ｗｉｎｄｏｗ．ｉｎｎｅｒＨｅｉｇｈｔ」の実行結果＋「フレーム名．ｗｉｎｄｏｗ．ｓｃｒｏｌｌＭａｘＹ」の実行結果を、キャプチャ対象フレーム全体の縦幅として特定してもよい。
【０２１５】
また、フレーム範囲取得部６１６は、キャプチャ対象フレームのフレームＩＤを指定して、関数「ｇｅｔＣｌｉｅｎｔＲｅｃｔａｎｇｌｅ」を呼び出す。そして、キャプチャ対象フレームの可視部分、言い換えれば、スクロールすることなく画面６３０上で表示される部分のサイズ、ここではキャプチャ対象フレームにおける可視部分の横幅および縦幅をプロキシ処理部１６６から取得する。
【０２１６】
なお、プロキシ処理部１６６は、関数「ｇｅｔＣｌｉｅｎｔＲｅｃｔａｎｇｌｅ」の呼び出しを受け付けたとき、当該関数に対応するＪＡＶＡスクリプトをトップページで実行させる。例えば、「フレーム名．ｄｏｃｕｍｅｎｔ．ｄｏｃｕｍｅｎｔＥｌｅｍｅｎｔ．ｃｌｉｅｎｔＷｉｄｔｈ」の実行結果を、キャプチャ対象フレームにおける可視部分の横幅として特定してもよい。同様に、「フレーム名．ｄｏｃｕｍｅｎｔ．ｄｏｃｕｍｅｎｔＥｌｅｍｅｎｔ．ｃｌｉｅｎｔＨｅｉｇｈｔ」の実行結果を、キャプチャ対象フレームにおける可視部分の縦幅として特定してもよい。
【０２１７】
フレームスクロール処理部６１７は、キャプチャ対象フレーム全体の横幅をその可視部分の横幅で除算（余は切り上げ）し、その結果を横スクロール上限回数として決定する。また、キャプチャ対象フレーム全体の縦幅をその可視部分の縦幅で除算（余は切り上げ）し、その結果を縦スクロール上限回数として決定する。
【０２１８】
また、フレームスクロール処理部６１７は、キャプチャ対象フレームの画像取得が行われると、次の画像取得の前に、フレームを縦スクロールさせ、もしくは縦スクロールおよび横スクロールさせる。具体的には、縦スクロールを実行させるために、キャプチャ対象フレームのフレームＩＤ、横スクロール量には０、縦スクロール量としてキャプチャ対象フレームの可視部分の縦幅を指定して、関数「ｄｏＳｃｒｏｌｌＦｒａｍｅＴｏ」を呼び出す。また横スクロールを実行させるために、キャプチャ対象フレームのフレームＩＤ、横スクロール量としてキャプチャ対象フレームの可視部分の横幅、縦スクロール量には０を指定して、関数「ｄｏＳｃｒｏｌｌＦｒａｍｅＴｏ」を呼び出す。
【０２１９】
第１実施形態では、いわゆる逆Ｎ型にスクロールが実行される。すなわち、フレームスクロール処理部６１７は、画像取得処理ごとに、まず横位置を固定したまま縦スクロールをその上限回数まで１回ずつ繰り返す。次に、縦位置を初期位置に戻すとともに横スクロールを１回実行する。そして、再度横位置を固定したまま縦スクロールをその上限回数まで１回ずつ繰り返す。そして、縦スクロール回数および横スクロール回数のいずれもが上限回数に到達すると、キャプチャ対象フレームに対するスクロール処理を終了する。
【０２２０】
エレメント処理部６１９は、キャプチャ対象エレメントをキャプチャするための準備処理を実行する。エレメント処理部６１９は、エレメント相対位置取得部６２０と、エレメント表示位置特定部６２１と、エレメント範囲取得部６２２と、エレメントスクロール処理部６２３とを含む。
【０２２１】
エレメント相対位置取得部６２０は、キャプチャ対象エレメントのエレメントＩＤを指定して、関数「ｇｅｔＯｆｆｓｅｔＰｏｓｉｔｉｏｎＯｆＥｌｅｍｅｎｔ」を呼び出す。そして、キャプチャ対象エレメントが含まれるフレームの左上端を原点とする直交座標系における座標であり、キャプチャ対象エレメントの左上端の座標（以下、「フレーム内座標」とも呼ぶ。）を取得する。例えば、フレームａ６３８に含まれるエレメント６４４については、ポイント６６２を原点としたエレメント６４４の左上端座標を取得する。
【０２２２】
なお、プロキシ処理部１６６は、関数「ｇｅｔＯｆｆｓｅｔＰｏｓｉｔｉｏｎＯｆＥｌｅｍｅｎｔ」の呼び出しを受け付けたとき、当該関数に対応するＪＡＶＡスクリプトをフレームページで実行させる。例えば、「エレメント名．ｇｅｔＢｏｕｎｄｉｎｇＣｌｉｅｎｔＲｅｃｔ．ｌｅｆｔ」を実行させ、その戻り値として、キャプチャ対象エレメントのフレーム内座標の横座標値を取得してもよい。同様に、「エレメント名．ｇｅｔＢｏｕｎｄｉｎｇＣｌｉｅｎｔＲｅｃｔ．ｔｏｐ」を実行させ、その戻り値として、キャプチャ対象エレメントのフレーム内座標の縦座標値を取得してもよい。
【０２２３】
エレメント表示位置特定部６２１は、フレーム表示位置取得部６１５により取得された、画面６３０上におけるキャプチャ対象フレームの表示位置を示す座標と、エレメント相対位置取得部６２０により取得された、キャプチャ対象エレメントのフレーム内座標とにしたがって、画面６３０上におけるキャプチャ対象エレメントの表示位置を特定する。具体的には、キャプチャ対象フレームの左上端座標の縦座標値および横座標値に、キャプチャ対象エレメントのフレーム内座標の縦座標値および横座標値を加算することにより、キャプチャ対象エレメントの左上端の座標（画面６３０上での座標）を導出する。
【０２２４】
エレメント範囲取得部６２２は、キャプチャ対象エレメントのエレメントＩＤを指定して、関数「ｇｅｔＳｃｒｏｌｌＲｅｃｔａｎｇｌｅＯｆＥｌｅｍｅｎｔ」を呼び出す。そして、キャプチャ対象フレームの不可視部分を含む全体サイズ、ここではキャプチャ対象フレーム全体の横幅と縦幅をプロキシ処理部１６６から取得する。
【０２２５】
なお、プロキシ処理部１６６は、関数「ｇｅｔＳｃｒｏｌｌＲｅｃｔａｎｇｌｅＯｆＥｌｅｍｅｎｔ」の呼び出しを受け付けたとき、当該関数に対応するＪＡＶＡスクリプトをフレームページで実行させる。例えば、「エレメント名．ｓｃｒｏｌｌＷｉｄｔｈ」を実行させ、その戻り値として、キャプチャ対象エレメント全体の横幅を取得してもよい。同様に、「エレメント名．ｓｃｒｏｌｌＨｅｉｇｈｔ」を実行させ、その戻り値として、キャプチャ対象エレメントのフレーム内座標の縦幅を取得してもよい。
【０２２６】
またエレメント範囲取得部６２２は、キャプチャ対象エレメントのエレメントＩＤを指定して、関数「ｇｅｔＣｌｉｅｎｔＲｅｃｔａｎｇｌｅＯｆＥｌｅｍｅｎｔ」を呼び出す。そして、キャプチャ対象エレメントの可視部分のサイズ、ここではキャプチャ対象フレームにおける可視部分の横幅および縦幅をプロキシ処理部１６６から取得する。
【０２２７】
なお、プロキシ処理部１６６は、関数「ｇｅｔＣｌｉｅｎｔＲｅｃｔａｎｇｌｅＯｆＥｌｅｍｅｎｔ」の呼び出しを受け付けたとき、当該関数に対応するＪＡＶＡスクリプトをフレームページで実行させる。例えば、「エレメント名．ｃｌｉｅｎｔＷｉｄｔｈ」の実行結果を、キャプチャ対象エレメントにおける可視部分の横幅として取得してもよい。同様に、「エレメント名．ｃｌｉｅｎｔＨｅｉｇｈｔ」の実行結果を、キャプチャ対象エレメントにおける可視部分の縦幅として取得してもよい。
【０２２８】
エレメントスクロール処理部６２３は、キャプチャ対象エレメント全体の横幅をその可視部分の横幅で除算（余は切り上げ）し、その結果を横スクロール上限回数として決定する。また、キャプチャ対象エレメント全体の縦幅をその可視部分の縦幅で除算（余は切り上げ）し、その結果を縦スクロール上限回数として決定する。
【０２２９】
またエレメントスクロール処理部６２３は、キャプチャ対象エレメントの画像取得が行われると、次の画像取得の前に、エレメントを縦スクロールさせ、もしくは縦スクロールおよび横スクロールさせる。具体的には、縦スクロールを実行させるために、キャプチャ対象エレメントのエレメントＩＤ、横スクロール量には０、縦スクロール量としてキャプチャ対象エレメントの可視部分の縦幅を指定して、関数「ｄｏＳｃｒｏｌｌＥｌｅｍｅｎｔＴｏ」を呼び出す。また横スクロールを実行させるために、キャプチャ対象エレメントのエレメントＩＤ、横スクロール量としてキャプチャ対象エレメントの可視部分の横幅、縦スクロール量には０を指定して、関数「ｄｏＳｃｒｏｌｌＥｌｅｍｅｎｔＴｏ」を呼び出す。エレメントのスクロール態様は、既述したフレームのスクロール態様と同様である。
【０２３０】
画像取得部６２５は、画面６３０上におけるキャプチャ対象フレームの表示位置にしたがって、キャプチャ対象フレームの表示画像をキャプチャする。また、画面６３０上におけるキャプチャ対象エレメントの表示位置にしたがって、キャプチャ対象エレメントの表示画像をキャプチャする。第１実施形態の画像取得部６２５は、ブラウザウィンドウ６３２のヘッダ領域６３６をキャプチャ対象から除外する。すなわち、ヘッダ領域６３６の表示画像が除外された、純粋にキャプチャ対象フレームの表示画像を取得する。
【０２３１】
例えば、画像取得部６２５は、画面６３０上におけるキャプチャ対象フレームの左上端の座標値を始点として指定し、キャプチャ対象エレメントの可視部分の横幅および縦幅をキャプチャ範囲として指定して、ＯＳの画面キャプチャ関数（ＡＰＩ）を呼び出してもよい。そして、キャプチャ対象エレメントの可視部分の画像データをメモリ（クリップボード）内に保存させてもよい。
【０２３２】
また画像取得部６２５は、フレームスクロール処理部６１７により決定された縦横のスクロール回数が上限に達するまで、キャプチャ対象フレームのキャプチャ処理を繰り返す。同様に、エレメントスクロール処理部６２３により決定された縦横のスクロール回数が上限に達するまで、キャプチャ対象エレメントのキャプチャ処理を繰り替えす。したがって、スクロールバーが設定されたフレームもしくはエレメントについては、複数のキャプチャ画像のデータをメモリ内に取り込む。
【０２３３】
画像合成部６２７は、１つのキャプチャ対象フレームに対する複数回の画像取得処理により取得された、複数枚のキャプチャ画像のデータを１枚の画像データに合成する。そして、１つのキャプチャ対象フレームについては、１枚の画像データを動作テストの証左物として結果保持部１５２へ格納する。エレメントについても同様であり、１つのキャプチャ対象フレームについては、１枚の画像データを動作テストの証左物として結果保持部１５２へ格納する。なお、複数のキャプチャ画像間に重複部分が存在する場合は、一方のキャプチャ画像からその重複部分をトリミングした上で１枚の画像に合成する。
【０２３４】
以上の構成による動作を以下説明する。
図４１は、動作検証装置１００における画像キャプチャ処理の動作を示すフローチャートである。動作テストの実行において、ウェブページの画像キャプチャ要求を受け付けた場合（Ｓ６００のＹ）、対象特定部６１２は、その要求で指定されたキャプチャ対象ウィンドウに含まれるフレームのリストをプロキシ処理部１６６から取得する（Ｓ６０２）。対象特定部６１２は、フレームリストに含まれるフレームの１つをキャプチャ対象フレームとして特定する（Ｓ６０４）。フレーム表示位置取得部６１５は、キャプチャ対象フレームを指定して、後述するフレーム表示位置特定処理をプロキシ処理部１６６に実行させる（Ｓ６０６）。フレーム範囲取得部６１６は、キャプチャ対象フレーム全体のサイズおよびその可視部分のサイズを取得する（Ｓ６０８）。フレームスクロール処理部６１７は、キャプチャ対象フレーム全体のサイズおよびその可視部分のサイズにしたがって、キャプチャ対象フレームに対して実行すべき縦横のスクロール上限回数をそれぞれ決定する（Ｓ６１０）。
【０２３５】
画像取得部６２５は、キャプチャ対象フレームの可視部分の画像を一時的にメモリへ格納する（Ｓ６１２）。スクロールの上限回数に達していなければ（Ｓ６１４のＮ）、フレームスクロール処理部６１７は、キャプチャ対象フレームを１単位分、スクロールさせることにより、キャプチャ対象フレームの表示内容（すなわち可視部分）を変化させて、Ｓ６１２に戻る（Ｓ６１６）。スクロールの上限回数に到達すると（Ｓ６１４のＹ）、画像合成部６２７は、キャプチャ対象フレームについて一時的に保存された複数のキャプチャ画像を取得し、それらを合成した１枚の画像データを設定する。そして、合成後の画像データを動作テストの証左物として結果保持部１５２へ格納する（Ｓ６１８）。なお、キャプチャ画像が１枚であれば、その画像をそのまま証左物として結果保持部１５２へ格納する。
【０２３６】
対象特定部６１２は、キャプチャ対象フレームに含まれるエレメントのリストをプロキシ処理部１６６から取得する。未キャプチャのエレメント（すなわちキャプチャ対象エレメント）が残存する場合（Ｓ６２０のＮ）、エレメント相対位置取得部６２０は、キャプチャ対象フレーム内でのキャプチャ対象エレメントの位置を取得する（Ｓ６２２）。エレメント表示位置特定部６２１は、画面上でのキャプチャ対象フレームの表示位置と、キャプチャ対象フレーム内でのキャプチャ対象エレメントの位置とにしたがって、画面上でのキャプチャ対象エレメントの表示位置を導出する（Ｓ６２４）。そしてＳ６０８に戻る。
【０２３７】
エレメントのキャプチャ処理において、エレメント範囲取得部６２２は、キャプチャ対象エレメント全体のサイズおよびその可視部分のサイズを取得する（Ｓ６０８）。エレメントスクロール処理部６２３は、キャプチャ対象エレメント全体のサイズおよびその可視部分のサイズにしたがって、キャプチャ対象エレメントに対して実行すべき縦横のスクロール上限回数をそれぞれ決定する（Ｓ６１０）。画像取得部６２５は、キャプチャ対象エレメントの可視部分の画像を一時的にメモリへ格納する（Ｓ６１２）。スクロールの上限回数に達していなければ（Ｓ６１４のＮ）、エレメントスクロール処理部６２３は、キャプチャ対象エレメントを１単位分、スクロールさせてＳ６１２に戻る（Ｓ６１６）。スクロールの上限回数に到達すると（Ｓ６１４のＹ）、画像合成部６２７は、キャプチャ対象エレメントについて一時的に保存された複数のキャプチャ画像を取得し、それらを合成した１枚の画像データを設定する（Ｓ６１８）。
【０２３８】
全キャプチャ対象エレメントに対するキャプチャ処理が完了した場合（Ｓ６２０のＹ）、フレームリストの一部のフレームに対するキャプチャ処理が未完了であれば（Ｓ６２６のＮ）、Ｓ６０４に戻り、新たにキャプチャ対象フレームが決定されて処理が続行する。フレームリストの全フレームに対するキャプチャ処理が完了した場合（Ｓ６２６のＹ）、本図のフローを終了する。なお、ウェブページの画像キャプチャ要求を受け付けなければ（Ｓ６００のＮ）、以降の処理はスキップされて本図のフローを終了する。
【０２３９】
図４２は、図４１のＳ６０６のフレーム表示位置特定処理を詳細に示すフローチャートである。ウィンドウ表示位置取得部６０２は、キャプチャ対象フレームを含むキャプチャ対象ウィンドウについて、画面上におけるその表示位置を取得する（Ｓ６３０）。ヘッダ領域特定部６０４は、キャプチャ対象ウィンドウ全体のサイズとクライアント領域６３４のサイズとの差を計算することにより、ヘッダ領域６３６のサイズを導出する（Ｓ６３２）。クライアント領域特定部６０６は、画面上におけるキャプチャ対象ウィンドウの表示位置とヘッダ領域６３６のサイズとにしたがって、画面上におけるクライアント領域６３４の表示位置を導出する（Ｓ６３４）。フレーム相対位置取得部６０８は、クライアント領域６３４内でのキャプチャ対象フレームの位置を取得する（Ｓ６３６）。フレーム表示位置特定部６１０は、画面上におけるクライアント領域６３４の表示位置と、クライアント領域６３４におけるキャプチャ対象フレームの位置とにしたがって、画面上におけるキャプチャ対象フレームの表示位置を導出する（Ｓ６３８）。
【０２４０】
第１実施形態の動作検証装置１００によれば、動作テストの成否を確認するために必要なウェブページの表示画像だけを証左物として保存する。具体的には、フレームに表示されたウェブページの内容そのものであり、ヘッダ領域等の余分な部分、言い換えれば、動作テストの結果確認にはむしろ邪魔となる部分を排除したキャプチャ画像をユーザへ提示できる。これにより、効率のよい動作テストを支援できる。
【０２４１】
（第２の実施の形態）
本発明の第２の実施の形態（以下、「第２実施形態」とも呼ぶ。）は、ブラウザウィンドウ６３２において起動されるウェブブラウザがＦＦブラウザ５４６である点で第１実施形態とは異なる。
【０２４２】
図４３は、ブラウザウィンドウにおけるウェブコンテンツの表示例を示す。同図の要素のうち先に説明した図３７の要素と同一もしくは対応する要素には図３７と同じ符号を付しており、以下の説明は省略する。図４３で示すように、第２実施形態のブラウザウィンドウ６３２は、第１実施形態のブラウザウィンドウ６３２と異なり、クライアント領域６３４の下部に固定長（例えば２６ピクセル）のステータスバーを備える。また、第２実施形態のブラウザウィンドウ６３２は、ブラウザウィンドウ外部のオブジェクト（他のウィンドウや背景等）との境界として、ある程度の幅（例えば固定長の４ピクセル）が設定された枠線６６６を備える。
【０２４３】
第２実施形態における動作検証装置１００の主な機能構成は第１実施形態と同様であり、主な動作も第１実施形態と同様である。以下では、第２実施形態における動作検証装置１００について、第１実施形態とは異なる点を説明する。
【０２４４】
画像位置特定部６００のヘッダ領域特定部６０４は、ステータスバー６６４のサイズ（幅）を加味して、ヘッダ領域６３６のサイズを特定する。具体的には、ブラウザウィンドウ６３２の縦幅から、クライアント領域６３４の縦幅を減算するとともに、ステータスバー６６４の縦の長さ、ここでは予め定められた２６ピクセルを減算することにより、ヘッダ領域６３６の縦の長さを導出する。なお、固定値の２６ピクセルは、厳密には、ステータスバー６６４の縦の長さおよび枠線６６６の幅の合計値であるとも言える。
【０２４５】
画像位置特定部６００のクライアント領域特定部６０６は、枠線６６６のサイズ（幅）を加味して、画面６３０におけるクライアント領域６３４の表示位置を特定する。具体的には、ブラウザウィンドウ６３２の左上端の座標の縦座標値にヘッダ領域６３６の縦の長さを加算する一方で、当該座標の横座標値に枠線６６６の幅、ここでは予め定められた４ピクセルを加算することにより、クライアント領域６３４の左上端の座標を導出する。
【０２４６】
第２実施形態の動作検証装置１００によれば、ブラウザウィンドウ６３２においてステータスバー６６４およびある程度の幅を有する枠線６６６が配置されるウェブブラウザを用いた動作テストの場合も、第１実施形態と同様の効果を実現できる。すなわち、ヘッダ領域に加えて、ステータスバーや枠線等、動作テストの結果確認に邪魔となる部分を排除したキャプチャ画像をユーザへ提示できる。
【０２４７】
以上、本発明を第１の実施の形態および第２の実施の形態をもとに説明した。この実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。以下、変形例を示す。
【０２４８】
第１の変形例を説明する。上記実施の形態においては、ヘッダ領域６３６はクライアント領域６３４の上部に配置されることとしたが、ブラウザウィンドウ６３２の態様はこれに限られない。例えば、ヘッダ領域６３６はクライアント領域６３４の左側に配置されてもよい。この場合、ヘッダ領域特定部６０４は、ブラウザウィンドウ６３２の横の長さとクライアント領域６３４の横の長さとを取得して、それらの差を計算することにより、ヘッダ領域６３６の横の長さを特定してもよい。そして、クライアント領域特定部６０６は、ブラウザウィンドウ６３２の左上端の横座標値に、ヘッダ領域６３６の横の長さを加算する一方、その縦座標値はそのまま用いて、クライアント領域６３４の左上端の座標を導出してもよい。
【０２４９】
第２の変形例を説明する。上記実施の形態では特に言及していないが、第１実施形態と第２実施形態とは組み合わせられて、同一の動作検証装置１００において実現されてもよい。例えば、プロキシ処理部１６６は、Ｓａｆａｒｉブラウザ５６２を起動したブラウザウィンドウの表示画像をキャプチャする際に呼び出される第１の画像位置特定部と、ＦＦブラウザ５４６を起動したブラウザウィンドウの表示画像をキャプチャする際に呼び出される第２の画像位置特定部を含んでもよい。そして、プロキシ処理部１６６は、キャプチャ対象となるブラウザウィンドウの種別に応じて、いずれかを動作させてもよい。
【０２５０】
別の構成として、画像位置特定部６００のヘッダ領域特定部６０４およびクライアント領域特定部６０６は、キャプチャ対象となるブラウザウィンドウの種別に応じて、第１実施形態に記載の動作もしくは第２実施形態に記載の動作のいずれかを実行してもよい。なお、ブラウザウィンドウの種別は、動作テスト開始時の引数や、各種設定ファイルにおいてユーザが指定してもよく、ＯＳやブラウザ処理部１６０から動的に読み込んでもよい。
【０２５１】
第３の変形例を説明する。上記実施の形態ではクライアント領域６３４が複数のフレームに分割された例を示したが、クライアント領域６３４は必ずしも複数のフレームに分割されなくてもよい。この場合、フレーム処理部６１４は、クライアント領域全体を１つのフレームととらえて、実施の形態と同様に動作すればよい。また、エレメント処理部６１９は、クライアント領域全体に含まれるエレメントを、１つのフレームに含まれるエレメントととらえて、実施の形態と同様に動作すればよい。
【０２５２】
第４の変形例を説明する。上記実施の形態ではウェブブラウザとしてＳａｆａｒｉブラウザ５６２とＦＦブラウザ５４６を例示した。しかし、本発明の技術思想の適用範囲はこれらの種類のウェブブラウザには限られない。例えば、ブラウザウィンドウ６３２においてステータスバー６６４が未配置で、かつ、枠線６６６の幅が所定値未満のウェブブラウザについては、第１実施形態の技術を適用可能である。また、ステータスバー６６４が配置され、かつ、枠線６６６の幅が所定値以上のウェブブラウザについては、第２実施形態の技術を適用可能である。また、ステータスバー６６４が配置されるものの枠線６６６の幅が所定値未満である場合や、逆に、ステータスバー６６４が未配置であるものの枠線６６６の幅が所定値以上である場合、第１実施形態および第２実施形態の構成を適宜選択して組み合わせてよいことは当業者には理解されるところである。
【０２５３】
第５の変形例を説明する。上記実施の形態では特に言及していないが、動作検証装置１００は、動作テストにおいて取得されたキャプチャ画像が一致するか否かを照合するための照合画像を保持する照合画像保持部をさらに備えてもよい。この照合画像は、実施の形態のキャプチャ画像と同様に、フレーム単位・エレメント単位で設定された画像データである。
【０２５４】
また動作検証装置１００は、証左物としてのキャプチャ画像と照合画像とが一致するか否かを判定する照合部をさらに備えてもよい。証左物としてのキャプチャ画像は、動作テストにおけるキャプチャ画像であり、言い換えれば画像合成部６２７により合成された画像であり、さらに言い換えれば結果保持部１５２に格納されたキャプチャ画像である。照合部は、キャプチャ画像と照合画像とが一致するか否かの判定結果を、所定の記憶領域（ファイルやＤＢ等）に格納してユーザへ通知してもよい。この変形例によれば、動作の正常性の判定を自動化して、効率的な動作テストを支援できる。また、上記実施の形態では、ヘッダ領域が除外された、純粋なウェブコンテンツの内容がキャプチャされるため、照合領域の除外設定（いわゆるマスク処理）が不要になり、キャプチャ画像と照合画像とが一致するか否かを容易に判定できる。
【０２５５】
上述した参考技術、実施の形態、変形例の任意の組み合わせもまた本発明の実施の形態として有用である。組み合わせによって生じる新たな実施の形態は、組み合わされる参考技術、実施の形態、変形例それぞれの効果をあわせもつ。
【０２５６】
請求項に記載の各構成要件が果たすべき機能は、参考技術、実施の形態、および変形例において示された各構成要素の単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。
【符号の説明】
【０２５７】
１００  動作検証装置、  １６０  ブラウザ処理部、  １６６  プロキシ処理部、  １７０  証左物設定部、  ６００  画像位置特定部、  ６０２  ウィンドウ表示位置取得部、  ６０４  ヘッダ領域特定部、  ６０６  クライアント領域特定部、  ６０８  フレーム相対位置取得部、  ６１０  フレーム表示位置特定部、  ６１２  対象特定部、  ６２５  画像取得部、  ６２７  画像合成部、  ６３０  画面、  ６３２  ブラウザウィンドウ、  ６３４  クライアント領域、  ６３６  ヘッダ領域、  ６６４  ステータスバー、  ６６６  枠線。
【産業上の利用可能性】
【０２５８】
この発明は、製品の動作をテストする装置に利用できる。
【図１（ａ）】
2012042560.tif 000003
【図１（ｂ）】
2012042560.tif 000004
【図２】
2012042560.tif 000005
【図３】
2012042560.tif 000006
【図４】
2012042560.tif 000007
【図５】
2012042560.tif 000008
【図６】
2012042560.tif 000009
【図７】
2012042560.tif 000010
【図８】
2012042560.tif 000011
【図９】
2012042560.tif 000012
【図１０】
2012042560.tif 000013
【図１１】
2012042560.tif 000014
【図１２】
2012042560.tif 000015
【図１３】
2012042560.tif 000016
【図１４】
2012042560.tif 000017
【図１５】
2012042560.tif 000018
【図１６】
2012042560.tif 000019
【図１７】
2012042560.tif 000020
【図１８】
2012042560.tif 000021
【図１９】
2012042560.tif 000022
【図２０】
2012042560.tif 000023
【図２１】
2012042560.tif 000024
【図２２】
2012042560.tif 000025
【図２３】
2012042560.tif 000026
【図２４】
2012042560.tif 000027
【図２５】
2012042560.tif 000028
【図２６】
2012042560.tif 000029
【図２７】
2012042560.tif 000030
【図２８】
2012042560.tif 000031
【図２９】
2012042560.tif 000032
【図３０】
2012042560.tif 000033
【図３１】
2012042560.tif 000034
【図３２】
2012042560.tif 000035
【図３３】
2012042560.tif 000036
【図３４】
2012042560.tif 000037
【図３５】
2012042560.tif 000038
【図３６】
2012042560.tif 000039
【図３７】
2012042560.tif 000040
【図３８】
2012042560.tif 000041
【図３９】
2012042560.tif 000042
【図４０】
2012042560.tif 000043
【図４１】
2012042560.tif 000044
【図４２】
2012042560.tif 000045
【図４３】
2012042560.tif 000046
【国際調査報告】
2012042560.tif 000047
2012042560.tif 000048
2012042560.tif 000049
2012042560.tif 000050