本実施の形態では、Android(商標または登録商標)OS(Operating System)が搭載されたタブレットPC上においてウェブページの自動試験を実行するアプリケーション(以下、「自動試験AP」とも呼ぶ。)を提案する。図1は、自動試験AP300のソフトウェアスタックの概念図である。自動試験AP300は、AndroidOSに対応したオープンソースソフトウェアであるSelenium2.0を基盤とする。オープンソース拡張クラス304は、Selenium2.0の機能を修正・追加するクラス群である。例えば、サイドバーの隠蔽や不要なダイアログを非表示とする等の機能を提供する。
汎用部品306は、画面キャプチャによる画像取得や、ウェブページのロード待ち処理等、ウェブページの自動試験実行時に必要となる汎用的な部品(クラス群)である。画面操作共通部品308は、ウェブページに配置されたボタンやテキストエリア等の各種オブジェクトに対する操作部品(クラス群)である。後述のアクションクラスは、典型的に汎用部品306や画面操作共通部品308(が提供する関数・メソッド)を呼び出す。これらは自動試験ツールとしての資産と言え、Selenium2.0やAndroidOSの更新・発展に応じて拡張される。
アクションクラス310は、ウェブページに配置されたボタンやテキストフィールド等の各種オブジェクトへの操作内容を保持するクラス群であり、典型的には画面単位(すなわちウェブページ単位)に作成される。アクションクラス310で規定される他の操作としては、試験対象のウェブページを取得して画面表示させる操作やウェブブラウザ画面(すなわちウェブブラウザのウィンドウに表示されたウェブページ画像)の縦もしくは横のスクロール操作、ウェブブラウザ画面のキャプチャ操作等がある。
データクラス312は、テストケース毎に定められる画面操作情報(例えばボタンに対する押下操作の有無や、テキストフィールドに対する入力文字を示す情報)を保持するクラス群であり、典型的にはテストケース毎に作成される。シナリオクラス314は、アクションクラスとデータクラスとを組み合わせ、これらをテストケースとして保持する。これらは試験スクリプトとしての資産と言え、試験を実施するアプリチームが試験対象の画面(ウェブページ)に応じて適宜開発する。
実施の形態の自動試験AP300は、図1の自動試験ツールと試験スクリプトを包含するものである。なお図1には不図示であるが、自動試験AP300は、自動試験ツールと試験スクリプトとを連携させ、ウェブページの試験を統括的に制御するクラス群(いわゆる試験実行エンジン)を含む。
またSelenium2.0は、ウェブページの試験に使用するウェブブラウザであるWebView(以下、「試験用ブラウザ」とも呼ぶ。)を内包し、試験対象として指定されたウェブページをその試験用ブラウザに表示させる。またSelenium2.0は、試験用ブラウザに表示させたウェブページを操作するための関数を外部(後述の操作実行部44等)から呼び出し可能に公開する。
例えば、画面操作共通部品308や汎用部品306のクラス群が、Selenium2.0が提供する関数を呼び出すと、Selenium2.0は、呼び出された関数に対応する試験用ブラウザのAPIを呼び出す。これにより、ユーザが指定した操作(典型的にはウェブページに配置された各種オブジェクトに対する入力操作)を、試験用ブラウザを介して試験対象のウェブページに対して実行する。すなわち典型的な関数呼び出し関係は、アクションクラス→画面操作共通部品308や汎用部品306→Selenium2.0の公開関数→試験用ブラウザAPIとなる。
またSelenium2.0は、ウェブページの表示画面(試験用ブラウザに表示されたウェブページの画像)をキャプチャするための関数も公開する。なお、Selenium2.0によるウェブページの操作の一部は、Selenium2.0が、OSが提供する関数をさらに呼び出すことにより実現される。
ここで図2を参照して、自動試験AP300によるウェブページ試験の仕組みを概説する。図2(a)は試験対象のウェブページ110の表示画面を模式的に示し、図2(b)はウェブページ110のHTMLプログラム120を示す。ウェブページ110のテキストフィールド112はHTMLプログラム120のコード122に対応し、ウェブページ110のボタン114はHTMLプログラム120のコード124に対応する。
図2(c)は、ウェブページ110に対する操作種別を定めたアクションクラス130のコードを示す。アクションクラス130は、「(操作対象オブジェクトの識別情報).画面操作共通部品308やアクションクラス310が提供する関数名(入力データ等の引数)」の形式で操作種別を規定する。図2(d)は、ウェブページ110に対する操作での入力内容を定めたデータクラス140を示す。データクラス140は、アクションクラス130での関数呼び出し時の引数を規定している。
具体的には、図2(c)のコード132は、画面操作共通部品308のsetKey関数を呼び出し、図2(d)のコード142が定める「1234」を、ウェブページ110のテキストフィールド112へ入力する操作を規定している。なお、setKey関数の呼び出しを受け付けた画面操作共通部品308は、setKey関数に対応するSelenium2.0が提供する関数を呼び出す。また図2(c)のコード134は、画面操作共通部品308のclick関数を図2(d)のコード144が定める「ON」を引数として呼び出すことにより、ウェブページ110のボタン114をクリックする操作を規定している。
実施の形態の自動試験APは、Selenium2.0の機能を拡充してウェブページの試験効率の向上・試験品質の向上を実現する。その主な特徴を3点説明する。
(特徴1)ウェブページに配置された所定のオブジェクト(例えば、テキストフィールドやテキストエリア、プルダウンリスト等、以下「特殊オブジェクト」とも呼ぶ。)に対して試験データを設定すべき場合に、ウェブページのDOM(Document Object Model)ツリーを操作することにより試験データを直接設定する。
Selenium2.0は、これらの特殊オブジェクトを操作するための関数を提供しており、内部的にSelenium2.0はOSが提供する操作関数を呼び出す。しかし、OSの操作関数を利用する方式は試験効率の面で問題があった。すなわち、OSの操作関数を呼び出す方式では、テキストフィールドやテキストエリア等への文字入力の際にソフトウェアキーボードが表示され、ソフトウェアキーボードを介して文字入力がなされるため、文字入力に時間を要してしまう。本来、試験で確認すべきことは文字入力後(さらにボタン押下後)の画面表示の変化(例えば別のウェブページへの遷移)であり、文字入力そのものの成否ではないため、文字入力に長時間を要することは望ましくない。またプルダウンリストの操作時には、選択可能項目のリストを展開表示した際に処理が停止してしまうこともあった。
ここで自動試験APによる試験対象・正常性の確認対象は、あくまでウェブページであり、またウェブページを提供するウェブサーバであり、ソフトウェアキーボードやプルダウンリスト(を用いたデータ入力可否の確認)ではない。したがって、これらの部品を用いたデータ入力処理は経由しなくても、ウェブページやウェブサーバの挙動(例えばデータ入力後のウェブページの表示内容の変化)を確認するという試験目的は達成できる。
そこで自動試験APは、ウェブページの操作対象オブジェクトに対するOSが提供する操作関数であり、データ設定のためのGUIオブジェクトを一旦表示させた上で操作対象オブジェクトにデータを設定する操作関数を呼び出すことを抑制する。この操作関数は、画面や画面内の入力フィールドに対するデータ入力のための、AndroidOSが提供するネイティブ部品であるとも言える。自動試験APは、OSが提供する操作関数を呼び出す代わりに、ウェブページのDOMツリーにおけるオブジェクトの要素値を直接編集し、オブジェクトへ試験データを直接設定する。言い換えれば、タブレットPC12のメモリに展開された操作対象のオブジェクトのデータに対して、入力文字列や選択項目等の試験データを直接設定する。例えば、このようなDOMツリー操作機能が、図2(c)で示したsetKey関数に実装される。これにより、ソフトウェアキーボードを使用することなく文字入力操作を実現し、またプルダウンリストを展開させることなく項目選択操作を実現し、それらの操作に要する時間を短縮することにより試験効率を向上させる。
(特徴2)試験用ブラウザのウィンドウを、タブレットPCの標準ブラウザのウィンドウと同じ構成になるよう調整する。なおウィンドウは、ウェブブラウザ等のアプリケーションの処理結果をディスプレイに表示させるための画面と言え、アプリケーションの処理結果を描画するためにOSが(アプリケーションに)提供するGUI部品、表示領域であるとも言える。
タブレットPCを使用するエンドユーザは、タブレットPCにおいて通常使用するブラウザ(いわゆる既定のブラウザ)として設定されたウェブブラウザ(以下、「標準ブラウザ」と呼ぶ。)を使用してウェブページを閲覧することが一般的である。標準ブラウザは、AndroidOSがデフォルトで使用するウェブブラウザとも言える。その一方、Selenium2.0に組み込まれた試験用ブラウザは標準ブラウザと異なる。そのため、標準ブラウザのウィンドウの構成と試験用ブラウザのウィンドウのデフォルトの構成は異なる。ウェブページの自動試験では、エビデンスとしてウェブページの表示画面をキャプチャするが、その画面キャプチャ画像が、エンドユーザが実際にウェブページを閲覧する際の画面と異なっていると試験の品質が低下してしまうことがある。
そこで自動試験APは、試験用ブラウザのウィンドウを標準ブラウザのウィンドウの構成とあわせるように、試験用ブラウザのウィンドウのレイアウトを調整する。例えば、標準ブラウザのウィンドウに表示される一方、試験用ブラウザのウィンドウには表示されないアドレスバーと同じサイズの付加的なオブジェクト(例えばボタンオブジェクト)を試験用ブラウザのウィンドウに表示させる。これにより、試験用ブラウザのウィンドウを、タブレットPCの標準ブラウザのウィンドウと同じ構成とし、ウェブページの表示態様を同じものにできる。この結果、試験のエビデンスとしての画面キャプチャ画像が、エンドユーザが標準ブラウザを使用してウェブページを閲覧する際のウェブページの見え方を反映したものとなり、試験の品質低下を抑制することができる。
また、Android端末の種類が異なると、各端末で標準的に用いられるウェブブラウザの種類も異なることがあり、各端末でウェブブラウザ(のウィンドウ)のレイアウトが異なることもある。さらにまた、ウェブページは複数種類のAndroid端末で表示がサポートされる必要もあり、この場合、複数種類のAndroid端末においてウェブページが試験されることもある。このような背景を踏まえ、本発明者は、複数種類のAndroid端末に亘り、各端末で異なるウェブブラウザ(のウィンドウ)のレイアウトを吸収するための仕組みは重要であると考える。
(特徴3)アクションクラスにて操作対象として指定されたオブジェクトが、ウェブページにおいて操作可能な状態か否かを確認し、操作可能な状態である場合に、そのオブジェクトに対する操作を実行する。
本発明者は、ウェブサーバからのウェブページデータの取得自体は完了しても、そのウェブページに配置されたオブジェクトのロードは未完了なことがあることを知見した。例えば、ウェブサーバからのウェブページデータの取得とは非同期の処理がウェブページでなされる場合に、その非同期処理が完了して初めて操作対象オブジェクトの操作が可能になることがある。本来、試験で確認すべきことはオブジェクトに対する操作後の画面表示の変化(例えば別のウェブページへの遷移)であり、オブジェクトに対する操作の成否そのものではなく、オブジェクトのロード未完了に起因するエラーの発生は望ましくない。また、オブジェクトのロード未完了に起因するエラーが発生した場合、本来の試験目的を達成するために試験のやり直しが必要となり、試験効率の低下を招くことがある。
そこで自動試験APは、操作対象として指定されたオブジェクトが操作可能な状態であるか否かをDOMツリーにアクセスして確認し、操作可能な状態であることを条件として、そのオブジェクトを操作する。これにより、オブジェクトのロード未完了に起因するエラーの発生を抑制して試験効率の低下を抑制する。
また、自動試験APが操作対象オブジェクトの状態を自動判定し、適切なタイミングで操作することにより、試験担当者は操作対象オブジェクトに対する厳密な操作タイミングを意識することなくアクションクラスを実装できる。例えば、操作対象オブジェクトが操作可能な状態になるまで待機する等のコードを個々のアクションクラスに実装する必要がなく、また、操作対象オブジェクトのロードタイミングにしたがって個々のアクションクラスのコードに修正が発生することを抑制できる。
具体例は後述するが、ウェブページのプログラムにおいて、ウェブサーバからウェブページを取得する処理とは非同期に実行される処理(外部との通信処理や描画処理等)が実装されることがある。例えば、ウェブページのリロードを伴わずにサーバとXML形式のデータのやり取りするAjaxコード等である。このような非同期処理が実行される場合、ウェブページのロード自体は完了しても、操作対象オブジェクトのロードが未完了の可能性がある。特徴3によると、オブジェクト操作時に、そのオブジェクトが操作可能な状態か否かを確認するため、ウェブページで非同期処理が実行される場合にも、オブジェクトのロード未完了に起因するエラーの発生を抑制できる。また上述したように、試験担当者は非同期処理における操作対象オブジェクトの状態を意識することなくアクションクラスを実装でき、非同期処理の影響によりアクションクラスのコードに修正が発生することを抑制できる。
図3は、実施の形態の試験システムの構成を示す。自動試験システム100は、試験対象となるウェブページを提供するウェブサーバ10と、タブレットPC12で総称されるタブレットPC12a、タブレットPC12b、タブレットPC12cと、管理サーバ14を備える。これらの装置は、LAN・WAN・インターネット等を含む通信網16を介して接続される。
タブレットPC12は、AndroidOSを搭載した携帯型の情報処理装置である。タブレットPC12はウェブページの試験装置として動作し、シナリオクラスの定義にしたがって試験対象となる1以上のウェブページをウェブサーバ10から取得し、各ウェブページに対する操作を実行する。
管理サーバ14は、タブレットPC12におけるウェブページ試験を管理する情報処理装置であり、タブレットPC12a〜タブレットPC12cのそれぞれで記録されたウェブページのキャプチャ画像を一括して保持する。また、試験用ブラウザの表示態様を標準ブラウザの表示態様に対応させるためのプログラムであり、タブレットPC12a〜タブレットPC12cそれぞれの標準ブラウザに応じて個々にカスタマイズしたプログラムを各タブレットPC12へ提供する。
図4は、図3のタブレットPC12の機能構成を示すブロック図である。タブレットPC12は、入力装置20と、ディスプレイ21と、OS部22と、アプリケーション部24を備える。
本明細書のブロック図において示される各ブロックは、ハードウェア的には、コンピュータのCPUをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。例えばアプリケーション部24の各機能ブロックは、プログラムモジュールと記録媒体に格納され、タブレットPC12のストレージへインストールされ、タブレットPC12のメインメモリに読み込まれてもよい。そしてCPUにより実行されることで、各機能ブロックの機能が発揮されてもよい。他のブロック図についても同様である。
入力装置20は例えばタッチパネルであり、ディスプレイ21は例えば液晶ディスプレイや有機ELディスプレイである。OS部22はAndroidOSの機能を提供し、例えばタブレットPC12の動作を統括的に制御する。またOS部22は、入力装置20やディスプレイ21等のハードウェアとアプリケーション部24との仲介機能も提供する。
アプリケーション部24は、タブレットPC12にインストールされたアプリケーションプログラムの機能を提供する。アプリケーション部24は、標準ブラウザ26と自動試験部28を含む。
標準ブラウザ26は、タブレットPC12において既定のウェブブラウザとして設定されたウェブブラウザである。例えば、タブレットPC12に当初からインストールされたウェブブラウザ(Webkit系ブラウザ等)であってもよい。また、タブレットPC12のユーザが既定のウェブブラウザとして指定した任意のウェブブラウザであってもよい。標準ブラウザ26は、標準ブラウザのウィンドウをディスプレイ21に表示させる標準ブラウザ表示部としても機能する。
図5は、標準ブラウザ26のウィンドウを示す。同図は、標準ブラウザ26のウィンドウをタブレットPC12のディスプレイ21に表示させた状態であり、また検索サイトのURLを指定して、検索サイトのウェブページを表示させた状態を示している。標準ブラウザ26のウィンドウは、ウェブページのタイトルを表示するタイトルバー160と、ウェブページのURLや操作用の各種アイコンを表示するアドレスバー162と、コンテンツ領域164を含む。コンテンツ領域164は、ウェブページのHTMLコードやJAVAスクリプトコード等にもとづくテキストやフォーム等の表示領域である(「JAVAスクリプト」は登録商標)。
図5(a)は、初期の表示状態を示している。図5(b)は、図5(a)のウィンドウに対する下スクロール操作が受け付けられたとき、言い換えれば、図5(a)のウェブページを下スクロールさせたときの表示状態を示している。図5(b)で示すように、標準ブラウザ26のウィンドウでは、下スクロール操作に伴って、初期はフルサイズで表示したアドレスバー162を徐々に非表示状態に移行させる。
図4に戻り、自動試験部28は上述の自動試験APに対応する。自動試験部28は、標準ブラウザ情報通知部30と、試験用ブラウザ更新部32と、試験支援部34と、試験データ保持部42と、操作実行部44と、キャプチャ画像保持部50と、画面キャプチャ部52と、キャプチャ画像提供部54を含む。試験支援部34はSelenium2.0に対応する機能ブロックである。試験支援部34は、試験用ブラウザ36と、ブラウザ表示部37と、ページ管理部38と、ページ操作仲介部40を含む。
試験用ブラウザ36は、Selenium2.0がウェブページの試験に使用するために内包するウェブブラウザ(典型的にはWebView)である。試験用ブラウザ36は、アクションクラスで指定された試験対象のウェブページのデータ(HTMLプログラムやJAVAスクリプトプログラム、CSS、画像等)をウェブサーバ10から取得する。ブラウザ表示部37は、試験用ブラウザ36のウィンドウの構成(タイトルバーのレイアウト等)を定めたプログラムにしたがって、試験用ブラウザ36のウィンドウをディスプレイ21に表示させる。試験用ブラウザ36は、そのウィンドウのコンテンツ領域にウェブページを描画する。
図6は、デフォルトの試験用ブラウザ36のウィンドウを示す。同図は、デフォルトの試験用ブラウザ36のウィンドウをタブレットPC12のディスプレイ21に表示させた状態であり、また図5と同様に検索サイトのURLを指定して、検索サイトのウェブページを表示させた状態を示している。デフォルトの試験用ブラウザ36のウィンドウは、タイトルバー170とコンテンツ領域172を含むがアドレスバーを含まない。またタイトルバー170の縦サイズは、標準ブラウザのタイトルバー160よりも小さい。
図6(a)は初期の表示状態を示している。図6(b)は、図6(a)のウィンドウに対する下スクロール操作が受け付けられたとき、言い換えれば、図6(a)のウェブページを下スクロールさせたときの表示状態を示している。上述したように試験用ブラウザ36のウィンドウにはアドレスバーが表示されないため、図5のコンテンツ領域164と図6のコンテンツ領域172のサイズが異なり、その結果、画面表示されるウェブページの範囲(サイズ)も異なるものとなる。
図4に戻り、ページ管理部38は、タブレットPC12のメインメモリに展開されたウェブページのデータを、木構造形式で表現したデータ(具体的にはDOMツリー)を保持する。このDOMツリーは、ウェブページに配置されたボタンやテキストフィールド等のオブジェクトを要素として保持し、テキストフィールドやプルダウンリストに対する設定データ(入力文字列や選択項目等)を各要素の値(要素値)として保持する。
ページ操作仲介部40は、試験用ブラウザ36を操作するための関数としてSelenium2.0が外部に公開する関数が呼び出された場合、その関数に対応する試験用ブラウザ36のAPIを呼び出すことにより、試験用ブラウザ36を操作する。ページ操作仲介部40は、例えばSelenium2.0が内包するSeleniumWebDriverである。
標準ブラウザ情報通知部30は、試験用ブラウザ36の起動時に、所定の記憶領域に格納された試験用ブラウザ更新フラグを確認する。そのフラグが試験用ブラウザ36の「未更新」(すなわちデフォルト状態)を示す場合、標準ブラウザ情報通知部30は、標準ブラウザ26のウィンドウの構成を示す情報を標準ブラウザ26から取得する。この情報は、タイトルバー160の縦サイズとアドレスバー162の縦サイズの情報を含む。例えば、標準ブラウザ情報通知部30は、標準ブラウザ26のソースコードの記載内容にしたがって、上記サイズを特定してもよい。標準ブラウザ情報通知部30は、標準ブラウザ26のウィンドウの構成を示す情報を管理サーバ14へ送信する。
後述するように管理サーバ14は、標準ブラウザ26のウィンドウの構成にしたがって試験用ブラウザ用の改変プログラムを生成する。試験用ブラウザ更新部32は、管理サーバ14から試験用ブラウザ用の改変プログラムを取得し、後述の試験用ブラウザ36およびブラウザ表示部37のオリジナルプログラムを改変プログラムにより上書き更新する(置き換える)。そして試験用ブラウザ更新フラグを「更新済」へ変更する。なお、タブレットPC12において標準ブラウザ(すなわち既定のウェブブラウザ)が変更された場合、試験用ブラウザ更新フラグは再度「未更新」へ戻される。
図7は、試験用ブラウザ用の改変プログラムを示す。図7(a)は試験用ブラウザ36のオリジナルコードを修正した、試験用ブラウザ36を更新するための改変プログラム180を示している。図7(a)のタイトルバー設定コード182は、試験用ブラウザ36のウィンドウにおけるタイトルバー170の縦サイズを、標準ブラウザ26のウィンドウにおけるタイトルバー160の縦サイズと同じにするよう改変したものである。
図7(b)はブラウザ表示部37(具体的にはSelenium2.0におけるブラウザウィンドウのレイアウト定義プログラム)のオリジナルコードを修正した、ブラウザ表示部37を更新するための改変プログラム184を示している。実施の形態の改変プログラム184は、試験用ブラウザ36のウィンドウに、アドレスバーの代替としてボタンオブジェクトを配置するよう改変したものである。このボタンオブジェクトを以下、「擬似アドレスバー」とも呼ぶ。擬似アドレスバー設定コード186では、擬似アドレスバーのサイズを、標準ブラウザ26のウィンドウにおけるアドレスバー162のサイズと同じにするよう設定している。
図8は、改変プログラム適用後の試験用ブラウザ36のウィンドウを示す。同図は、図7の改変プログラム適用後の試験用ブラウザ36およびブラウザ表示部37により表示される試験用ブラウザ36のウィンドウの構成を示している。図8(a)は初期の表示状態を示している。図8(b)は、図8(a)のウィンドウに対する下スクロール操作が受け付けられたとき、言い換えれば、図8(a)のウェブページを下スクロールさせたときの表示状態を示している。
図5、図6、図8を比較すると、改変プログラム適用後の試験用ブラウザ36のウィンドウでは、タイトルバーのサイズがデフォルト時よりも拡大されて標準ブラウザと同じサイズに調整されている(調整タイトルバー174)。また、標準ブラウザのウィンドウにおけるアドレスバー162と同じサイズの擬似アドレスバー176(ボタンオブジェクト)が付加されている。これにより、試験用ブラウザ36使用時に一時に画面表示されるウェブページの範囲(サイズ)は、標準ブラウザ26使用時と同じになる。
図4に戻り、試験データ保持部42は、ウェブページに対する試験内容を定めた試験データ(図1のシナリオクラス314)を保持する。すなわち、ウェブページ単位(画面単位)に作成されたアクションクラス310と、試験パターン単位に作成されたデータクラス312を保持する。
操作実行部44は、自動試験APの試験実行エンジンとしての機能を提供し、また図1の画面操作共通部品308および汎用部品306の機能も提供する。基本的に操作実行部44は、画面操作共通部品308および汎用部品306として提供する関数、すなわちウェブページ(に配置された各種オブジェクト)に対する操作関数がアクションクラスにおいて呼び出されると、その操作関数に対応したページ操作仲介部40(Selenium2.0)が提供する関数を呼び出す。ページ操作仲介部40は、呼び出された関数に応じて試験用ブラウザ36を操作し、またOS部22が提供する関数を適宜呼び出すことにより、ウェブページ(に配置された各種オブジェクト)を操作する。
ここで操作実行部44の特徴的な構成を説明する。図9は、操作実行部44の処理を説明するための概念図である。図9(a)は試験対象のウェブページを示しており、このウェブページはキーワードを入力すべきテキストフィールド190と、キーワード入力後に押下されるべきボタン192を含む。このウェブページの試験内容を規定するアクションクラスでは、(1)テキストフィールド190へのキーワード入力、(2)ボタン192のクリック、(3)画面キャプチャ、が規定されている。この試験の目的は、上記の(1)(2)による画面表示内容の変化が正しいかを確認するものである。
ところでSelenium2.0が提供する文字入力関数を利用する場合、Selenium2.0の文字入力関数はOS部22が提供する文字入力関数を呼び出す。OS部22が提供する文字入力関数は、ソフトウェアキーボード194を一旦表示させ、ソフトウェアキーボード194を介してテキストフィールド190へ文字列を入力する。したがって、試験での本来の確認目的でない、ウェブページのオブジェクトへの文字入力が完了するまでに時間を要してしまう。
そこで操作実行部44は、テキストフィールド190への文字列入力関数が呼び出されると、Selenium2.0の文字入力関数(さらにOSの文字列入力関数)を呼び出すことに代えて、ページ管理部38が保持するウェブページのDOMツリーへアクセスする。そして、文字列入力対象のオブジェクトの要素値として入力文字列を直接設定する。図9(b)は、図9(a)のHTMLコードを示している。コード196で示すように、テキストフィールド190の要素「value」の値として、試験で入力すべき文字列を直接設定する。setAttributeメソッドを使用してvalue属性の値を設定してもよい。
図10も、操作実行部44の処理を説明するための概念図である。図10(a)は試験対象のウェブページを示しており、このウェブページはユーザがプランを選択するべきプルダウンリスト200と、プラン選択後に押下されるべきボタン202を含む。なお、プルダウンリスト200は、プルダウンメニューやドロップダウンリスト、セレクトボックスとも呼ばれる。このウェブページの試験内容を規定するアクションクラスでは、(1)プルダウンリスト200での項目選択、(2)ボタン202のクリック、(3)画面キャプチャ、が規定されている。この試験の目的も、上記の(1)(2)による画面表示内容の変化が正しいかを確認するものである。
ところでSelenium2.0が提供する項目選択関数を利用する場合、Selenium2.0の項目選択関数はOS部22が提供する項目選択関数を呼び出す。OS部22が提供する項目選択関数は、プルダウンリスト200を展開させ、複数の選択候補の中から特定の項目をユーザに選択させるためのリストを表示させる。したがって、試験での本来の確認目的でない、プルダウンリスト200での項目選択が完了するまでに時間を要してしまっていた。また、プルダウンリスト200が展開された際に、以降の操作が停止してしまうこともあった。
そこで操作実行部44は、プルダウンリスト200への項目選択関数が呼び出されると、Selenium2.0の項目選択関数(さらにOSの項目選択関数)を呼び出すことに代えて、ページ管理部38が保持するウェブページのDOMツリーへアクセスする。そして、項目選択入力対象のオブジェクトの要素値として選択項目を直接設定する。図10(b)は、図10(a)のHTMLコードを示している。例えば、コード204で示すように、プルダウンリスト200の選択項目「プランB」の属性値として「Selected」を直接設定する。setAttributeメソッドを使用してoptionの属性値を設定してもよい。
例えば、図1の画面操作共通部品308が提供するプルダウンリスト操作関数は、引数1としてプルダウンリストのHTML文書内でのIDを指定し、引数2として選択すべき項目値を指定するものであってよい。このとき、操作実行部44は、ページ管理部38が保持するDOMツリーから、引数1のIDをキーとして要素オブジェクトを取得する。そして、その要素オブジェクトからプルダウンリスト内の選択可能項目を取得して引数2の項目値と比較する。引数2の項目値と一致する選択可能項目が検出された場合、DOMツリーを操作して、その選択可能項目のステータスを選択状態(Selected)に書き換え、プルダウンリストの表示項目をその選択可能項目に書き換える。
また操作実行部44は、ページ取得部46と操作可否判定部48を含む。ページ取得部46は、ページ操作仲介部40を介して、試験用ブラウザ36に試験対象ウェブページをウェブサーバ10から取得して表示させる。ページ取得部46は、ページ管理部38が保持するDOMツリーにアクセスし、取得対象のウェブページ(HTML)の「ReadyState」属性を1回以上取得する。そして、その属性値が完了(Status:complete)を示す場合に、ウェブページの取得(メモリへのロード)処理が完了したと判定する。
操作可否判定部48は、アクションクラスにおいて操作対象として指定されたオブジェクトが、操作可能な状態であるか否かを判定する。具体的には、操作可否判定部48は、ページ管理部38が保持するDOMツリーにアクセスし、操作対象オブジェクトに対応する要素がDOMツリーに存在するか否かを判定する。そして当該要素が存在する場合に、オブジェクトが操作可能な状態であると判定する。操作実行部44は、ページ取得部46が、ウェブページの取得処理が完了したと判定し、かつ、操作可否判定部48が、操作対象オブジェクトが操作可能な状態であると判定した場合に、ウェブページに配置された各種オブジェクトへの操作を実行する。
キャプチャ画像保持部50は、画面キャプチャ部52により取得された画面キャプチャ画像、すなわち、試験用ブラウザ36のウィンドウに表示されたウェブページの画像のデータを保持する記憶領域である。
画面キャプチャ部52は、試験用ブラウザ36のウィンドウに表示されたウェブページの画像データを取得し、取得した画像データをキャプチャ画像保持部50へ格納する。ここでウェブページが縦スクロールもしくは横スクロール可能な場合、言い換えれば、試験対象のウェブページにおいて画面に非表示の領域が存在する場合、画面キャプチャ部52は、画面キャプチャと画面スクロールを繰り返し、当初非表示となった領域を含むウェブページの全体の画像を取得する。すなわち、1画面に収まりきらないウェブページについては複数枚のキャプチャ画像に分割して、ウェブページの全領域の画像を取得する。この態様によると、1画面に収まりきらないサイズのウェブページであっても、その全領域のキャプチャ画像を記録でき、試験の品質を向上させることができる。
また画面キャプチャ部52は、試験対象のウェブページが、縦もしくは横スクロール可能なエレメントを含む場合、言い換えれば、ウェブページに配置されたエレメントにおいて画面に非表示の領域が存在する場合、そのエレメントを含む画面のキャプチャと、エレメントのスクロールを繰り返し、当初非表示となった領域を含むエレメント全体の画像を取得する。すなわち、1画面に収まりきらないエレメントについては複数枚のキャプチャ画像に分割して、エレメントの全領域の画像を取得する。この態様によると、1画面に収まりきらないサイズのエレメントであっても、その全領域のキャプチャ画像を記録でき、試験の品質を向上させることができる。
キャプチャ画像提供部54は、ADB(Android Debug Bridge)コマンドを使用して、キャプチャ画像保持部50に格納された1以上の画像データ(すなわちウェブページのキャプチャ画像およびエレメントのキャプチャ画像)を管理サーバ14へ送信する。
図11は、図3の管理サーバ14の機能構成を示すブロック図である。管理サーバ14は、原本プログラム保持部60と、標準ブラウザ情報取得部62と、プログラム改変部64と、改変プログラム提供部66と、キャプチャ画像保持部68と、キャプチャ画像取得部70を含む。
原本プログラム保持部60は、タブレットPC12(タブレットPC12a〜タブレットPC12c)の試験用ブラウザ36およびブラウザ表示部37のオリジナルのプログラムコードを保持する。これらのプログラムは、タブレットPC12における試験用ブラウザ36のウィンドウの構成を、標準ブラウザ26のウィンドウの構成と同じにするために改変が必要となるプログラムと言える。標準ブラウザ情報取得部62は、タブレットPC12a〜タブレットPC12cそれぞれの標準ブラウザ情報通知部30により通知された標準ブラウザ26のウィンドウの構成を示す情報を取得する。
プログラム改変部64は、標準ブラウザ26のウィンドウの構成にしたがって、原本プログラム保持部60が保持するオリジナルプログラムを改変する。具体的には、試験用ブラウザ36のウィンドウにおけるタイトルバーの縦サイズを、標準ブラウザ26のウィンドウにおけるタイトルバーの縦サイズと同じにするよう改変した試験用ブラウザ36のプログラムコード(例えば図7(a))を生成する。またプログラム改変部64は、試験用ブラウザ36のウィンドウに、アドレスバーの代替としてボタンオブジェクトを配置するよう改変したブラウザ表示部37のプログラムコード(例えば図7(b))を生成する。タブレットPC12a〜タブレットPC12cのそれぞれから取得された標準ブラウザの構成が異なる場合、プログラム改変部64はタブレットPC12a〜タブレットPC12cのそれぞれに対して異なる改変プログラムを生成する。
改変プログラム提供部66は、プログラム改変部64により生成された試験用ブラウザのための改変プログラムをタブレットPC12a〜タブレットPC12cのそれぞれへ送信する。そして、各タブレットPC12が保持する試験用ブラウザ36およびブラウザ表示部37のオリジナルのプログラムを改変プログラムで置き換えさせる。この態様によると、タブレットPC12a〜タブレットPC12cのそれぞれで設定された標準ブラウザの種類に応じた試験用ブラウザの改変プログラムを各タブレットPC12へ提供できる。そして、各タブレットPC12において試験用ブラウザのウィンドウの表示態様が、各タブレットPC12の標準ブラウザのウィンドウと同じになるよう自動設定できる。
キャプチャ画像保持部68は、タブレットPC12a〜タブレットPC12cのそれぞれにおけるウェブページの試験で記録された画面キャプチャ画像を一括して保持する記憶領域である。キャプチャ画像保持部68に保持された画面キャプチャ画像は、ウェブページの試験担当者や管理者により適宜参照されてよい。例えば管理サーバ14は、タブレットPC12a〜タブレットPC12cのそれぞれで記録された画面キャプチャ画像を比較可能に表示させるキャプチャ画像表示部をさらに備えてもよい。キャプチャ画像表示部は、同一のテストケースについて各タブレットPC12で記録された画像を並べてディスプレイに表示させてもよい。
キャプチャ画像取得部70は、ADBコマンドを使用して、タブレットPC12a〜タブレットPC12cのそれぞれで記録されたウェブページの画面キャプチャ画像を各タブレットPC12から取得し、キャプチャ画像保持部68に格納する。
以上の構成による自動試験システム100の動作を以下説明する。
図12は、自動試験システム100の動作を示すフローチャートである。タブレットPC12は、自動試験AP起動時に試験用ブラウザ36を起動する(S10)。そして、試験対象のウェブページをウェブサーバ10から取得して試験用ブラウザ36のウィンドウに表示させる(S12)。タブレットPC12は、ウェブページに配置された各種オブジェクト(ボタンやテキストエリア等の各種エレメント)に対する操作を実行し(S14)、ウェブページに対する画面キャプチャ処理を実行する(S16)。なお、S12〜S16の処理は、アクションクラスに規定された順序で実行される。管理サーバ14からキャプチャ画像の提供要求を受け付けると(S18のY)、タブレットPC12は記録した画面キャプチャ画像を管理サーバ14へ提供する(S20)。キャプチャ画像の提供要求を受け付けなければ(S18のN)、S20をスキップする。
図13は、図12のS10のウェブブラウザ起動処理を詳細に示す。試験用ブラウザ更新フラグが未更新を示す場合(S30のN)、タブレットPC12の標準ブラウザ情報通知部30は、標準ブラウザ26のウィンドウの構成を管理サーバ14へ通知する(S32)。管理サーバ14は、標準ブラウザ26のウィンドウの構成に即して試験用ブラウザ36およびブラウザ表示部37の更新プログラムを生成し、タブレットPC12の試験用ブラウザ更新部32は、その更新プログラムを取得する(S34)。そして試験用ブラウザ更新部32は、試験用ブラウザ36およびブラウザ表示部37のオリジナルプログラムを管理サーバ14から取得した更新プログラムで置き換える(S36)。試験用ブラウザ更新フラグが更新済みを示す場合は(S30のY)、S32〜S36をスキップする。ブラウザ表示部37は、標準ブラウザ26のウィンドウの構成と同態様の、試験用ブラウザ36のウィンドウをディスプレイ21に表示させる(S38)。
図14は、図12のS12のウェブページ取得処理を詳細に示す。アクションクラスにおいてウェブページの取得関数が呼び出された場合、タブレットPC12のページ取得部46は、呼び出し時の引数として指定されたタイムアウト値を取得する。そして、タイムアウト時刻=現在時刻(システム時刻)+タイムアウト値として、タイムアウト時刻を決定する(S40)。ページ取得部46は、ページ操作仲介部40および試験用ブラウザ36を介して、試験対象のウェブページの提供要求をウェブサーバ10へ送信する。現在時刻がタイムアウト時刻に未達であれば(S44のN)、ページ取得部46は、ページ管理部38が保持する試験対象ウェブページのDOMツリーにおけるReadySate値を取得する(S46)。
ReadyState値が完了を示す期待値と合致する場合(S48のY)、ページ取得部46は、ウェブページのロード(メモリへの読み込み)が完了したと判定する。そして、アクションクラスにおいて次に定義された試験操作の処理や、ロードされたウェブページに対する操作を定めた別のアクションクラスの処理等の次処理へ移行する(S50)。ReadyState値が完了を示す期待値と不一致の場合(S48のN)、0.1秒待機後にS44へ戻る(S52)。現在時刻がタイムアウト時刻を途過した場合(S44のY)、ページ取得部46は、ウェブページのロードエラーを示すエラーログを所定の記憶領域へ記録し、本試験処理を終了する(S54)。
図15は、図12のS14の画面要素操作処理を詳細に示す。リトライ回数が予め定められた規定回数以下の場合(S60のY)、操作可否判定部48は、アクションクラスで指定された操作対象オブジェクトの要素値を取得する(S62)。例えば、DOMDocumentオブジェクトのgetElementByID(引数はアクションクラスで指定されたID)や、getElementByTagName(引数はアクションクラスで指定されたタグ名)を呼び出すことにより要素値を取得してもよい。要素値が有意な所定値の場合、例えば非nullのオブジェクトとして取得された場合(S64のN)、操作可否判定部48は操作対象のオブジェクトが操作可能な状態になったと判定し、その旨を操作実行部44へ通知する。要素値がnullの場合は(S64のY)、一定時間(0.1秒等)待機した後、リトライ回数をインクリメントしてS60へ戻る(S66)。リトライ回数が規定回数を超過すると(S60のN)、操作可否判定部48は、オブジェクトのロードエラーを示すエラーログを所定の記憶領域へ記録し、本試験処理を終了する(S68)。
操作実行部44は、操作対象オブジェクトが操作可能な状態と判定され、その操作対象オブジェクトがDOMツリーを直接操作すべき特殊オブジェクトの場合(S70のY)、ページ管理部38が保持するDOMツリーの操作関数を呼び出すことにより、データクラスが規定する試験データをメモリのオブジェクトデータへ直接設定する(S72)。言い換えれば、OSが提供するオブジェクトの操作関数を直接的もしくは間接的に呼び出すことに代えて、DOMツリーを直接操作する。操作対象が特殊オブジェクトでなければ(S70のN)、操作実行部44は、アクションクラスで指定された関数に対応するSelenium2.0の操作関数を呼び出す(S74)。
特殊オブジェクトは、OSが提供するオブジェクトの操作関数を呼び出した場合にソフトウェアキーボードが表示される結果、データ設定に長時間を要してしまうテキストフィールドやテキストボックス等である。また、選択可能項目を展開表示させた場合に操作処理が停止することがあり、また項目選択に長時間を要してしまうプルダウンリストやセレクトボックス等である。DOMツリーの操作としては、例えば、DOMDocumentオブジェクトからgetElementByID等によりDOMElemntオブジェクトを取得し、そのオブジェクトに対してsetAttribute(引数は試験データ)を呼び出すことにより、特殊オブジェクトへ試験データを設定してもよい。
図16は、試験対象のウェブページを模式的に示す。図16(a)のウェブページにて展開リンク210がクリックされると、図16(b)で示すように、閉じるリンク214を含む動的表示コンテンツ212が表示される。図17は、図16のウェブページのプログラムコードを示す。図17のアンカータグ220は図16(a)の展開リンク210に対応し、ddタグ222は図16(b)の動的表示コンテンツ212に対応し、アンカータグ224は図16(b)の閉じるリンク214に対応する。この動的表示コンテンツ212の表示処理(すなわちアンカータグ220のクリックをトリガとした非表示状態から表示状態への切替処理)は、ウェブサーバ10からのウェブページの取得処理自体とは非同期の処理として実行される。
ここでアクションクラスにおいて、(第1操作)展開リンク210のクリック、(第2操作)閉じるリンク214のクリック、が規定されることとする。既述したように、動的表示コンテンツ212は、第1操作をトリガに描画されるものであり、その描画処理が完了しないうちは閉じるリンク214のクリックはできず、仮に閉じるリンク214のクリック操作を実行した場合、エラーが発生してしまう。
そこで実施の形態の操作可否判定部48は、図15のS62で示したように、操作対象のオブジェクトがDOMツリーに存在するか否か、言い換えれば、操作対象のオブジェクトがウェブページのデータとしてメモリにロード済みか否かを判定する。図16および図17の例では、文字列「閉じる」を要素値とするアンカータグ要素がDOMツリーに存在する(非nullのオブジェクトとして取得される)場合に、閉じるリンク214を操作可能と判定する。これにより、操作対象のオブジェクトのロードが未完了であることに起因するエラーの発生を回避できる。
図18は、図12のS16の画面キャプチャ処理を詳細に示す。タブレットPC12の画面キャプチャ部52は、試験対象ウェブページの全体サイズ、すなわち試験用ブラウザ36のウィンドウに表示された領域と非表示の(隠れた)領域の両方を含むサイズを取得する。また画面キャプチャ部52は、試験用ブラウザ36のウィンドウに表示された画面表示サイズ、すなわち試験用ブラウザ36のウィンドウに表示された領域のサイズであり、非表示の(隠れた)領域を含まないサイズを取得する(S80)。画面キャプチャ部52は、これらのサイズをJAVAスクリプトの関数により取得してもよい。例えばウェブページの全体サイズとして、document.documentElement.scrollWidth(横サイズ)・document.documentElement.scrollHeight(縦サイズ)を取得してもよい。またウェブページの画面表示サイズとして、document.documentElement.clientWidth(横サイズ)・document.documentElement.clientHeight(縦サイズ)を取得してもよい。
続いて画面キャプチャ部52は、試験対象ウェブページの全体サイズと画面表示サイズから横スクロール回数および縦スクロール回数を決定する(S82)。具体的には、試験対象ウェブページの全体サイズを画面表示サイズで割り、端数を+1としてカウントする。そして画面キャプチャ部52は、ウェブページを表示した試験用ブラウザ36のウィンドウを画面キャプチャして、その画像データをキャプチャ画像保持部50へ格納する(S84)。スクロール回数に未達であれば(S86のN)、試験用ブラウザ36のウィンドウに対して横スクロール操作もしくは縦スクロール操作を実行し(S88)、S84に戻る。例えば、画面キャプチャ→横スクロール→画面キャプチャ→横スクロール、を繰り返して横スクロールが上限に達すると、横を初期位置に戻すとともに一度縦スクロールさせ、再度、画面キャプチャ→横スクロール→・・・を繰り返し、縦スクロールが上限に達するまで画面キャプチャ画像を取得する。
ウェブページ全体の画面キャプチャ終了後(S86のY)、画面キャプチャ部52は、ウェブページのプログラムコードを参照して、ウェブページにスクロール可能なオブジェクト(例えばテーブルやテキストエリア、スクロールリスト等の要素)が配置されているか否かを特定する(S90)。スクロール可能オブジェクトが配置されている場合、画面キャプチャ部52は、そのオブジェクトの全体サイズ(試験用ブラウザ36のウィンドウに表示された領域と非表示の(隠れた)領域の両方を含むサイズ)と、試験用ブラウザ36のウィンドウに表示された画面表示サイズとを取得する(S92)。ウェブページのサイズの取得と同様に、JAVAスクリプトの関数や属性値、DOMツリーの属性値からこれらのサイズを取得してもよい。
続いて画面キャプチャ部52は、S82と同様に、スクロール可能オブジェクトの全体サイズと画面表示サイズから、そのオブジェクトの横スクロール回数および縦スクロール回数を決定する(S94)。そして画面キャプチャ部52は、スクロール可能オブジェクトを表示した試験用ブラウザ36のウィンドウを画面キャプチャして、その画像データをキャプチャ画像保持部50へ格納する(S96)。スクロール回数に未達であれば(S98のN)、スクロール可能オブジェクトに対して横スクロール操作もしくは縦スクロール操作を実行し(S100)、S96に戻る。スクロール回数が上限に達すると(S98のY)、本図のフローを終了する。
図19は、図12のS20のキャプチャ画像提供処理を詳細に示す。図19には不図示であるが、管理サーバ14は、現在時刻を取得し、yyyyMMddHHmmssの形式でキャプチャ画像を格納するディレクトリをキャプチャ画像保持部68に作成しておく。なおタブレットPC12a〜タブレットPC12cそれぞれの識別情報をディレクトリ名に付加し、それぞれの端末用のディレクトリを作成してもよい。この場合、タブレットPC12a〜タブレットPC12cのそれぞれから取得した画面キャプチャ画像を、それぞれの端末用のディレクトリに振分けて保持してもよい。
タブレットPC12のキャプチャ画像提供部54は、管理サーバ14のキャプチャ画像取得部70からキャプチャ画像提供要求を受け付けると、キャプチャ画像保持部50に保持された転送対象ファイル名の一覧を取得するADBコマンドを作成する(S110)。そして、キャプチャ画像保持部50の画像格納ディレクトリを指定し(S112)、S110で作成したADBコマンドを自動試験APの実行プロセスとは異なる外部プロセスとして実行する(S114)。そして、転送対象となる1以上のファイル名が文字コードMS932(すなわち管理サーバ14における文字コード)で記録されたファイル名一覧をOS部22から取得する(S116)。
続いてキャプチャ画像提供部54は、S116で取得されたファイル名を指定したコマンドであり、キャプチャ画像保持部50に保持された転送対象ファイルを管理サーバ14へ転送するADBコマンドを作成する(S118)。そして、キャプチャ画像保持部50の画像ディレクトリを指定し(S120)、S118で作成したADBコマンドを自動試験APの実行プロセスとは異なる外部プロセスとして実行する(S122)。そして、MS932の文字コードでファイル名が付与された転送対象ファイルを、OS部22を介して管理サーバ14へ送信させる(S124)。
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。以下変形例を示す。
第1の変形例を説明する。
上記実施の形態において操作可否判定部48は、ウェブページに配置された操作対象オブジェクトがDOMツリー上に存在するか否かを確認することにより、そのオブジェクトに対する操作が可能な状態か否かを判定することとした。例えば、図16および図17で示したウェブページでは、2番目の操作の対象である閉じるリンク214のタグを指定して、DOMツリーにおけるそのタグの要素オブジェクトが非nullであることを条件として、閉じるリンク214を操作した。変形例として、操作可否判定部48は、アクションクラスにおいて第1操作とそれに続く第2操作が規定されているとき、第1操作に伴うウェブページ内の処理が最後まで完了したか否かを確認することにより、第2操作の対象のオブジェクトに対する操作が可能な状態か否かを判定してもよい。
図20は、図16のウェブページのプログラムコードを示す。同図は、図17のHTMLコードのhead部で定義されたJAVAスクリプトコード(図20(a))と、CSSコード(図20(b))を示している。操作可否判定部48は、HTMLコードのhead部で規定されたJAVAスクリプトファイル、CSSファイル、画像ファイル等を参照する。操作可否判定部48は、試験対象のウェブページに関連するそれらのプログラムコードを参照し、第1の操作に伴い実行される処理をトレースすることにより、第1の操作に伴う処理が最後まで完了した場合のDOMツリー上の要素値(期待値)を特定する。そして、第1の操作を実行後のウェブページの要素値が、その期待値と整合するか否かを判定し、整合する場合に第2の操作が可能な状態と判定する。不整合であれば、図15のS64のY・S66と同様に、ウェブページの要素値と期待値との比較処理をリトライする。
図16、図17、図20を参照して具体例を示す。なお、図20(a)のJAVAスクリプトは、IDが「outline」となるタグ内のdtタグがクリックされると、「open」というクラス名のCSSを適用することを定めている。また、図20(b)のCSSは、IDが「outline」となるタグ内のdtタグとddタグのCSSを定義しており、「display:none」で非表示、「display:block」で表示と定義している。ここでもアクションクラスにおいて、(第1操作)図16(a)の展開リンク210のクリック、(第2操作)図16(b)の閉じるリンク214のクリック、が規定されることとする。
操作可否判定部48は、操作実行部44が第1操作を実行する前に、第1操作に伴うプログラム内の一連の処理を特定する。この例では、第1操作としての図17のアンカータグ220のクリックに伴い、図20(a)のコード230が実行され、続いて図20(b)のコード232が実行されて、最終的に属性「style」の属性値として「display:block」が設定されることを特定する。すなわち、属性「style」の属性値「display:block」を期待値として特定する。操作可否判定部48は、操作実行部44による第1操作の実行後、ページ管理部38が保持するDOMDocumetオブジェクトに対してgetElementByTagName("outline")を呼び出し、さらにDOM.getElementAttribute(outlineタグオブジェクト,"style")を呼び出して、属性「style」の属性値(すなわち上記の要素値)を取得する。操作可否判定部48は、取得した属性値に「display:block」が含まれるか否かを判定し、含まれれば第1操作に伴う一連の処理が完了したと判定し、第2操作を実行可能と判定する。
この変形例によると、試験対象のウェブページに対する第1操作とそれに続く第2操作が規定されているとき、第1操作に伴うウェブページ内の処理が最後まで完了したことを条件として第2操作を実行する。これにより、第2操作対象のオブジェクトのロード未完了に起因するエラーの発生を抑制できる。
なお操作可否判定部48は、試験対象のウェブページに対する第1操作とそれに続く第2操作が規定されているとき、実施の形態の条件と、第1の変形例の条件の両方が充足されたことを条件として、第2操作対象のオブジェクトに対する操作が可能な状態と判定してもよい。実施の形態の方式では、第2操作対象のオブジェクトのロードは完了したものの、第1操作が完了したことは確定できない。その一方、第1の変形例の方式では、第1操作が完了したことは確定できるものの、第2操作対象のオブジェクトのロードが完了したかは確定できない。したがって、これら2つの方式を組み合わせることにより、第1操作が完了し、かつ、第2操作対象のオブジェクトのロードが完了したことを条件として第2操作を実行することとなり、ウェブページの試験においてウェブページに配置されたオブジェクトの操作可否を一層適切に決定できる。
第2の変形例を説明する。
上記実施の形態では、試験用ブラウザのための改変プログラムを管理サーバ14が作成することとした。変形例として、タブレットPC12の内部で改変プログラムを作成してもよい。この場合、タブレットPC12は、実施の形態において管理サーバ14の機能ブロックとして説明した原本プログラム保持部60およびプログラム改変部64をさらに備えてもよい。そして、自動試験部28の内部において標準ブラウザ情報通知部30→プログラム改変部64→試験用ブラウザ更新部32と連携してもよい。
第3の変形例を説明する。
上記実施の形態では、ウェブページに配置されたオブジェクトのうち、OSが提供する操作関数を呼び出すことを抑制する特殊オブジェクトの例として、テキストフィールドやテキストエリア、プルダウンリストを示した。しかし、本発明の技術思想はこれらのオブジェクトに限定されるものではない。すなわち、OSが提供する操作関数を呼び出してデータを設定すると試験効率が低下すると想定されるオブジェクトであり、DOMツリーを操作して直接データを設定した方が効率的と想定されるオブジェクト全般に適用可能である。例えば、ラジオボタンやチェックボックス、アラートダイアログに対する試験データの入力や設定に適用されてもよい。
請求項に記載の各構成要件が果たすべき機能は、実施の形態および変形例において示された各構成要素の単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。