アーキテクトの役割 ======================= 「アーキテクト」は、プロジェクトに属する開発者の標準化(各工程の決まり事の策定、必要なツールの選定、共通部品の整備)に大きく関与し、全体を最適化を推進する役割を負っています。 FTをベースにテストを行うにあたっては、次のような役割を期待しています。 * 画面部品の標準化から導かれるコントロール構造のまとめ * テストのための共通関数やBのテーブル情報の辞書化 * テストに用いる共通的な外部プログラムの作成 画面部品を標準化する工程は、システム開発の準備作業です。これをきちんと行うことにことと合わせ、FTを使用すると、システムを開発し終わる前に作成したテスト仕様書をそのままテスト工程で実行できます。画面項目設計書に基づいた画面部品ならば、FTは問題なく操作することができます。そこに祖語があれば、エラーとなって検出されるでしょう。 このように、設計工程完了後に作成されたテスト仕様書が、テストプログラム開発の必要なく、そのままテスト自動化に使用できるという点が、他のテスト自動化ツールと大きく異なる点です。 共通 ======================= ------------------------ 辞書の項目とシンボル ------------------------ CommonDicシートにおいて使用されるWebアプリケーション、Javaアプリケーションに共通な固有のシンボルです。 .. list-table:: :header-rows: 1 :widths: 2,8 * - 表記 - 説明 * - Hdr_表項目名 - テスト仕様書の各表項目の名前を指定します。 * - DBCONNECT_接続名 - | uid:=ユーザID,pwd:=パスワード,jdbc:=接続文字列:[テーブル名1,テーブル名2,…] | ※接続文字列はJDBC接続文字列。 | ※テストのために接続するDBごとに設定すること。 * - Process_コマンド名 - | コマンド名は、入力支援ダイアログで選択項目として使用します。書式は以下。 | 実行形式(パスを含む) オプション | ※コマンドラインのエスケープ対象文字列にはエスケープ処理をすること。 * - TEST_DRIVER - テスト実行するためのJarファイル名 ------------------------ グループと版数 ------------------------ 環境設定ダイアログのプロファイルにおいて、 .. image:: ./img/env_profile.png :scale: 40% :align: center グループコードと版数を指定する欄があります。 * グループコード 未指定の場合のみ、指定することができます。 プロジェクトの管理者がグループ分けを行い、それに応じた環境設定ファイル「tclenv.json」を作成し各グループごとに割り当てます。 同じグループで作成したTestSuiteは同じグループに属したメンバもしくは管理者(グループコード未指定)のみ編集することができます。 * 版数 テスト対象のソフトウェアの版数を指定します。 アプリケーションのバージョンアップの際には、次のように行うとよいでしょう。 # 「版数」にバージョナップの版数を指定し、テスト仕様書を編集する環境に設定します。 # 必要に応じて旧版のテスト仕様書(Excel)を更新します。 # テスト仕様書からデータベースを更新します。 コントロール辞書の作成 ======================= 開発者が自動テスト作成を楽に行えるかどうかは、コントロール辞書の品質に大きく依存します。 ポイントは、FTに従ってテスト仕様書を作成する際に、項目IDや設定値を分かりやすくすることです。例えば、選択リストの操作においては、選択項目を設定値に指定できるように、コントロールのxpathを割り当てるなどの工夫が重要になります。 ------------------------ Web固有の項目とシンボル ------------------------ CommonDicシートに固有のシンボルです。 .. list-table:: :header-rows: 1 :widths: 2,8 * - 表記 - 説明 * - ListOf_CheckPoints_番号(1から) - | 経路選択のダイアログを開いた時の選択項目の一つを定義しています。 | ルートの通過点をカンマ区切りのリストで指定します。通過点の間の画面はFTが検索します。 | 経路選択のダイアログを開いた時の選択項目の一つを定義しています。 | ※通過点の間が空くと、DB更新時の検索に時間がかかります。 | 要素の書式: | 画面ID#モード もしくは 画面ID#モード.ボタンID(パラメータ組名) CntrlDicシートにおいて使用するシンボルです。 .. list-table:: :header-rows: 1 :widths: 2,8 * - 表記 - 説明 * - $ID - コントロールを特定するための識別子を記号化したもの。 * - $GID - 複合型のコントロールの場合、どのコントロールを特定するための識別子を記号したもの。 * - $ELM - 複合型コントロールにおいて、構成する子コントロールの相対パスを表現する記号。 * - $KEY - 表型コントロールにおいて、行を識別するための部分xpathを表現する記号。その列コントロール名の末尾に「*」を付ることで指定します。 * - $VAR - コントロールを選択するキーワードもしくは入力のための文字。 * - $POSITION - | 複合コントロールで子コントロールの識別が位置でのみ可能となる場合に使用します。開発者は、複合コントロールの項目IDに[]の中に位置を指定します。 | 例: itemID[n] CntrlDicシートにおいて使用可能なXPath式の拡張です。 .. csv-table:: :header-rows: 1 :widths: 4, 10 式,説明 @属性.has(値),属性が単一の属性値を保持している場合には、引数が完全一致かどうかを返す。属性が複数の値を保持している場合、引数がそのうちのどれかと完全一致しているかどうかを返す。 @属性.contains(値),引数が属性値の文字列の部分一致かどうかを返す。 .contains(値),引数が内部テキストの文字列の部分一致かどうかを返す。 ------------------------ コントロールを扱うために ------------------------ FTでは、初心者から上級者までが同様な記述レベルで同様の品質レベルのテストを実施できるように、テストの内容の本質でない部分(操作や情報取得の準備や呼び出し)を極力FTの実行エンジンで行うように工夫しています。 実行エンジンがそれらを行うために、状態取得法、操作法、およびそれらの委任関係、有効化法、コントロールを識別するためのxpathなどを、辞書に記述する必要があります。 コントロールの分類 ------------------------- + 単独コントロール ボタンやテキストボックスのように、コントロールに対して操作が単一に決まっているものを言います。単独コントロールは、より細かいコントロールに分解することはできません。 + 複合コントロール(グループIDなし) 例えば、多くの日付入力を行うコントロールでは、書式が決められたテキストボックスとカレンダを表示するボタンの二つの子コントロールから構成されています。画面項目仕様書では「日付入力コントロール」と単独記載されているでしょう。これを見る限り、複合コントロールではありませんが、内部では役割分担がなされています。 この例であれば、代表コントロールに委任(後述)を記述し、キー入力であればテキストボックスに委任し、クリックであればカレンダボタンに委任するようにします。 + 複合コントロール(グループIDあり) グループIDのある代表的な複合コントロールとして、代表的なものは「表」です。表のカラムには、日付入力コントロール、コンボボックス、テキストボックス、ボタンなどが配置されることもあります。各カラムのコントロールは、画面項目仕様書の中では、単独の項目として表現され、それらを束ねるモノとしてグループID(Webべージの中から特定の複合コントロールを識別するID)のような値が指定されているでしょう。 委任について ------------------------- 委任は、複合コントロールの状態取得や操作の欄において使用される記法です。 複合コントロールを構成する子コントロールが、さらに複合コントロールである場合があります。 そのような場合、画面項目仕様書やテスト仕様書には、孫以下のコントロールは明に現れることがありません。 孫以下のコントロールは、子コントロールの操作を分担しているのが通常です。例えば、コンボボックスの場合、内部にテキストボックスとプルダウンメニューがありますが、テキストボックスはキー入力を受け持ち、プルダウンメニューはマウス操作を受け持ちます。 この分担を表現するために、委任という表現を用います。 .. csv-table:: :header-rows: 1 :widths: 4,10,10 目的,書式,例 操作,action->委任先コントロール名, click->コンボボタン 状態取得,->委任先コントロール名, ->コンボテキスト 上の表の例は、コンボボックスに含まれるコンボボタンにclickを委任する場合です。指定可能なactionとしては、click, hover, sendkeysがあります。アクションごとに別のコントロールに委任する場合には、「|」でつなげます。 以下の例では、xpathの項と合わせて理解してください。 例: 操作  click->コンボボタン|sendkeys->コンボテキスト clickはコンボボタンに委任し、sendkeysはコンボテキストに委任します。 複数の操作が「|」でつながれている時に、設定値欄にアクションが明に指定されていない場合には、最初の操作が実行されます。 例: 状態取得 ->コンボテキスト コンボテキストから状態取得します。 ※ 委任先コントロールは、複合コントロールの中でユニークな名称である必要があります。 ------------------------ 項目について ------------------------ 代表名 ------------------------- 複合コントロールの名前もしくは単独コントロールの名前を指定します。 複合コントロールの場合、そのすべての子孫コントロールに共通なので、セル結合しておきます。 コントロール名 ------------------------- 実際に操作するコントロールの名前を指定します。 複合コントロールにおいては、複合コントロール内でユニークな名前にする必要があります。 ※ 以下は、Webページから読み込む場合の注意点です。表部品のようなコントロールでは、カラムに、特別な日付やコンボボックスを埋め込んだりすることがあります。そのような表部品をコントロール辞書で記述する場合、カラムに埋め込まれる共通的な子コントロールにより表部品を識別するようにしておくと、Webページから読み込み易くなります。共通以外の子コントロールには、コントロール名の末尾に共通以外の印である「?」を付けておきます。 ※ 名称については「!$」は禁止文字です。「*?」は特殊用途に使用します。 ※ 複合コントロールの1行目は、複合コントロール名を指定します。例えば以下のようになります。 .. csv-table:: :header-rows: 1 :widths: 7,7,7 代表コントロール名,要素コントロール名,親コントロール名 複合コントロールA,複合コントロールA, (以下セル結合しておく),子コントロールB,複合コントロールA 親コントロール名 ------------------------- 構造的に、そのコントロールの上層にあるコントロールを指定します。 最上層のコントロールについては指定する必要はありません。 ※ 複合コントロールの一行目の親コントロールは指定しません。 xpath ------------------------- 項目ID、グループIDおよび必要に応じて「設定値」からコントロールを特定するためのxpathを記述します。 但し、このxpath式には、次のような$から始まる特殊なシンボルが使用可能です。 * $ID:コントロールのノードを識別するための属性値を仮に指定します。 * $GID:複合コントロールのノードを識別するための属性値を仮に指定します。 * $VAR:ノードを特定するために、属性値もしくは内部テキストを指定します。$VARはテスト仕様書の設定値欄で与えられます。 * $ELM:子孫コントロールがある場合に、代表コントロールのパスに埋め込みます。$ELMに子孫コントロールに指定されたxpathを置き換えることにより、子孫コントロールを操作します。 * 単独コントロール xpath:$ID、$VARでコントロールを指定します。 $VARを指定するのは、選択項目があるコントロールの場合です。 $IDを競合させないことが重要です。競合が起こるるコントロールを特定することができなくなります。 ※ $IDは次のパターンで指定します。 [@属性='$ID'] [@属性.has('$ID')] 例1:属性値と設定値が一致する場合:[@属性名='$VAR'] 例2:内部テキストに設定値を含む場合:[.contains(‘$VAR’)] * 複合コントロール jQuery部品などには、コントロールの内部に、ボタン、テキスト編集領域、スイライダなどを備えたものがあります。そのような複合的なコントロールの構造を、xpathで記述します。 + 代表コントロール: 複合コントロール全体を指して代表コントロールという。識別するためIDがあります。そのIDをGIDと呼びます。GIDとタグ名により、代表コントロールの要素を指定することができます。 代表コントロールのxpath(以後、代表xpath)欄には、子孫コントロールにアクセスするためのxpathのテンプレートを指定します。$ELMに子孫コントロールを指定するためのxpathを代入することにより、子孫コントロールの要素を取得するための完全なxpathを得ることができます。$ELMまでのxpathは各子コントロールに共通なpath、いわば最大公約数的なxpathを指定します。 + 子コントロール: 子コントロールのxpath欄には、$ELMに代入するxpathを指定します。 「//」から始まる場合、代表コントロールのタグ内ではなく、bodyの直下など、独立した領域に存在することを意味します。メニュー項目の選択などは配下のタグではなく、body配下にあるケースも散見されます。 記法例: 代表コントロールのパス://tag[@id='$GID']//$ELM 子コントロールのパス:subtag[@属性名='$ID'] - 表型コントロール 各列ごとに異なるコントロールを配置されることがあります。列を特定する属性を$IDに指定します。 行を特定するための列要素:要素コントロール名の末尾に「*」を付ることで、その部分xpathが他の列要素から$KEYとして参照されます。部分xpathは、多くの場合、td[1]から始めます。例えば、特定するための表要素の表示文字列を$VARとして設定値欄で指定し、列の識別はclass属性で行うとして、td[1][.='$VAR'][@class.contains('$ID')]のように記述します。 他の列要素:$IDは各列を特定するための属性値です。xpathは、例えば上記の$KEYのような場合、tr[./$KEY]/td[position()>1][@class.contains('$ID')]のようにします。   各列要素は$KEYと同じ行に入るようにxpathを記述することが必要です。 ※ うまく行かない時のヒント:HTMLを読み込む機能を利用してみましょう。列要素の数を1要素づつ増やしていき、うまく行かなくなった時の列のxpathに問題があります。 ※ 効率化のためシングルトンパターンのように、一つの表の中で一つの入力コントロールのインスタンスを使いまわす場合があります。FTは、そのような場合でも、入力コントロールを見つけようと頑張りますが、あらかじめ辞書に指定しておくと、テストをより早く終えることができるでしょう。そのような子孫コントロール場合、xpathの末尾に「$」を付けます。孫コントロールで使われる場合が多いでしょう。 * その他のヒント。 + 部品の特長を最も表現しているxpathの階層構造は(//で)省略しないで記述します。 + タブのように、固定の繰り返し部品は[]つき。位置を$POSITIONで表します。 + プルダウンのように動的に組変わるメニューは$VARを使います。 例:コンボボックスの場合 .. csv-table:: :header-rows: 1 :widths: 8,8,8,8 代表コントロール名,要素コントロール名,親コントロール名,xpath コンボボックス,コンボボックス,,//div[@class.has('my_combobox')][@id='$GID']//$ELM コンボボックス,コンボテキスト,コンボボックス,input[@class.has('combo-text')] コンボボックス,コンボプルダウンボタン,コンボボックス,div[@class.has('combo-button')] コンボボックス,コンボプルダウンメニューアイテム,コンボプルダウンボタン,//li[@class.contains('combo-listitem')][.contains('$VAR')] ここでは。 コンボテキストはコンボボックスのテキストフィールドのコントロールです。 コンボプルダウンボタンはコンボボックスのプルダウンを開くボタンのコントロールです。 コンボプルダウンメニューアイテムはコンボボックスのプルダウンメニューの各項目のコントロールです。$VARは設定値が代入されます。xpathが//から始まっているのはコンボボックスの要素の外側にあるからです。 ※ 注意:xpathの中で同じパターンが複数回出現する場合、あいまいさを排除して記述します。  あいまいさを排除したxpath  //table/tr/td/table/tr/td...  あいまいさの残るxpath  //table//tr//td 状態取得 ------------------------- テスト実行時に操作の効果を検証するために、コントロールの状態を取得する必要があります。コントロール辞書では、そのコントロールを検証するための標準の状態を指定することができます。 状態取得の書き方は以下のものがあります。 * text() xpathで示されたコントロールの内部テキストを取得します。 * @属性名 xpathで示されたコントロールの属性名で指定されている値を返します。 * javascriptメソッド xpathで示されたjQueryコントロールのメソッドにより状態を取得する方法があります。多くのjQueryコントロールでは、val()メソッドがサポートされています。 ※ frame/iframe中のコントロールではSeleniumの制限により失敗します。 * 委任(委任の項目参照) 有効化操作 ------------------------- 複合コントロールの場合、クリックやフォーカスなどの操作を行わないと、自分自身への入力が有効化されない、もしくは、孫コントロールが表示されない場合があります。 そのような場合のために、孫コントロールを有効化するための操作を記述します。 例えば、表のセル編集の実装では、セルを選択したりフォーカスを当てたりした後に、初めて編集可能になるパターンがあります。そのような場合、有効化操作が決まっているならば、その操作を指定しておくことができます。これにより、開発者は有効化操作のことは気にしなくてよくなります。 次のように指定します。 (1) クリックする click() (2) マウスカーソルを上に移動する hover() (3) キー押下する sendkeys(押下するキー) (4) 複合コントロール内の他のコントロールの操作を行って有効化する、 他のコントロール名.アクション() のように指定することができます。「アクション」はsendkeys、click、hoverもしくはjQueryメソッドのいずれかになります。 操作 ------------------------- ボタンやリンクなど画面遷移を伴うコントロールには、操作の末尾に「!」を付けます。これは設計書やWebページからテスト仕様書のひな形を作成する際に、遷移コントロールを分別するためのものです。 同じ遷移型コントロールでも同一画面の表示変更などの処理を行う位置づけの場合には、必要に応じてExcelを切り貼り編集し、入力操作の欄に移してください。 ※ ヒント:遷移型コントロールとそうでないコントロールの識別規約については、例えば、onclickで呼ばれるJavascript関数の名称を規約したり、コントロールのクラス名の規約で識別する方法があるでしょう。 (1) クリックする click() (2) マウスカーソルを上に移動する hover() (3) キーを押下する sendkeys() ※ Javascriptのメソッドの場合、メソッド名+()を指定します。その場合の引数は設定値欄で与えられます。 (4) 他のコントロールに委任(委任の項目参照) ------------------------ コントロール辞書の確認 ------------------------ コントロール辞書をテスト開発者に提供する前に、辞書のxpathが画面部品に対して適切かどうかを確認する必要があります。 通常の開発では、画面部品の検証として、プロトタイプ的な画面を事前に作りますが、その画面を用いる方法として、以下の二つを紹介します。 #. HTMLから読み込む機能を利用する。 テスト仕様書のクイックアクセスツールバーから、「HTMLを読み込む」を選択します。 .. image:: ../making/img/readHtml.png :scale: 40% :align: center Internet Explorerが起動します。プロトタイプ画面のURLを指定し、その画面のコントロールを読み取ります。 正常にコントロール一覧を取得できればOKです。 #. xpath確認ツールを利用する。 テスト仕様書上で、control+shift+xを同時押下すると、次のツールが起動します。 .. image:: ./img/webelementgetter.png :scale: 40% :align: center ブラウザの種類を指定し、プラウザを起動し、起動後にプロトタイプ画面のURLを指定します。 コントロール辞書から合成されるxpath($ID,$GID,$VARなどに具体的な値を指定したもの)をあらかじめ用意しておき、それをテキストエリアに書き込みます。 「走査」ボタンを押下すると、ブラウザ上の該当のコントロールが赤く塗りつぶされます。 複数個検出された場合には、右上の表示に個数が表示されます。 ---------------------------- 設計書から読み込む場合の注意 ---------------------------- プログラムは必ずしも設計書通りに作られているとは限りません。 例えば、設計書に項目IDが設定されていたとしても、実際のWebページには該当のIDが存在せず、テスト実行が失敗する場合があります。 項目IDがテスト対象のページに存在していない理由として考えられるのは、次のようなケースがあります。 * 開発者が設計書の項目IDを何らかのミスで実装していない。 * javascriptで動的に生成する部品なので、そもそもIDを設計通りに付与できない。 後者の場合、設計書を見直す必要があります。 ※ 設計書からテスト仕様書を作成する際に、コントロールの判別はコントロール辞書の上から検証していき、最初に適合したコントロールとみなします。 従って、コントロール辞書の並びは重要です。 ---------------------------- HTMLから読み込む場合の注意 ---------------------------- コントロール辞書の各コントロールに適合した画面部品を全て抽出します。辞書の書き方によっては、ある要素が複数のコントロールの要件を満たす場合があります。そのような時は、重複して出力されます。 ---------------------------- Javascript関数の作成 ---------------------------- ReservedDicシートに、キー「function 関数名」で登録されていれば、関数名はjavascript関数として、設定値欄や評価式において使用できます。 +---------------------------------------------------------------------------------+ |二列目の書式 | +---------------------------------------------------------------------------------+ |(arg1,arg2,...) { | | 処理 | |} | +---------------------------------------------------------------------------------+ スクリプトの処理部において、関数の引数が項目IDである場合、「$x(項目ID)」は自動的にコントロールオブジェクトに変換されます。 また、「$this」は、現在の行のコントロールオブジェクトに変換されます。 ---------------------------- Javaによるマクロの作成 ---------------------------- 設定値の「文字列中に、Javaメソッドの実行結果を埋め込むことができます。 期首日や締め日など、プロジェクトの特性に依存する日付などを指定するために使用します。 +---------------------------------------------------------------------------------+ |クラスの仕様 | +---------------------------------------------------------------------------------+ |class XXXX { | | public static String YYYY(String... args) { | | } | |} | +---------------------------------------------------------------------------------+ 付属する日付ユーティリティクラスの実装では、argsの0番目に日付フォーマットを指定しています。 ---------------------------- Javaによる操作クラスの拡張 ---------------------------- ReservedDicにおいて、キーに「任意のユニーク名」、値としてPageActionのサブクラス名(FQN)が登録されていれば、click()やsendkeys()と同様に新たな操作を定義することができます。 .. csv-table:: :header-rows: 1 :widths: 3, 7 A列(操作名),B列(クラスの完全修飾名FQN) opeA, com.XXX.MyAction のようにすると、設定値欄にopeA()を指定することができます。 キーはclick()やsendkeys()と同様にコントロール辞書においても設定できます。コントロールの操作として指定すると、そのコントロールのデフォルトの操作になります。 +---------------------------------------------------------------------------------+ |スーパークラスとメソッド | +---------------------------------------------------------------------------------+ |package com.ftinc.si.assist.test.web; | |class PageAction { | | protected void doCore(WebDriver drv, WebElement elm) { | | } | |} | +---------------------------------------------------------------------------------+ doCoreメソッドが呼ばれる段階では、引数として渡ってくるWebElementは操作可能な状態であることが保証されています。 操作可能でない場合には、doCoreが呼ばれる前に例外が発行されます。 doCoreメソッドでは、WebElementを操作する処理を行います。 ebElementは、項目ID、グループID(、必要に応じて設定値)、およびコントロール辞書により特定されます。 ---------------------------- Webドライバクラスの指定 ---------------------------- CommonDicシートにおいて、BROWSER_INFOを以下のように指定することにより、RemoteWebDriverを使用することができます。これは、firefox, chrome,safari, ie, edge以外を指定する場合に使用します。 +--------------+-------------------------------------------------------------+ |A列 |B列 | +==============+=============================================================+ |BROWSER_INFO |{ "url":"ドライバサーバのURL", | | | "capabilities":DesiredCapabilitiesのJson } | +--------------+-------------------------------------------------------------+ 例えば、urlにスマートフォンと仲介するRemoteWebDriverのURL、capabilityにブラウザの諸元を指定することで、テスト対象のプラットフォームを拡大することができます。 ※ BROWSER_INFOの設定を有効にするためには、環境設定およびコマンドオプションにおいてwebtest.browserを設定しないでおく必要があります。 ※ DesiredCapabilitiesのJsonとは、setCapability(key, value)のkeyとvalueの組からなるMapのJsonを意味します。 ※ コマンド起動のオプションで「-browser.json:B列の書式(改行なし)」を指定することで、起動するプロセスごとに、firefox, chrome,safari, ie, edge以外のブラウザを指定することができます。 コントロール辞書作成支援ツール ================================= ---------------------------- 使用する前に ---------------------------- 本ツールは、既存のWebページもしくはモックのWebページから、テスト対象のコントロール部品のxpathテンプレートを抽出するための支援ツールです。 抽出は、走査ボタン押下してから待機秒後にマウスカーソルの真下にあるHTMLの要素およびその階層を解析することにより行います。 抽出したxpathを元に、アーキテクトが$VAR、必要であれば$POSITIONなどの条件を追加修正し、コントロール辞書を記述します。この作業は、特に、複合コントロールでは必須の作業になります。 ---------------------------- 操作方法 ---------------------------- テスト仕様書Excelの起動 ---------------------------- テスト仕様書Excelを起動します。編集対象のコントロール辞書ファイルおよびjavaモジュールは事前に設定しておきます。 Cntrl+Shift+pキーを同時に押下します。 ※ コントロール辞書のCntrlDicシートに本支援ツールが抽出したxpath情報を書き込むことになります。書き込むのは一つの代表コントロールです。 XPathGetterの操作 ---------------------------- .. image:: ./img/xpathgetter1.png :scale: 40% :align: center 本支援ツールの主画面であるXPathGetterが起動します。 次に、ブラウザを指定して、「開く」ボタンを押下します。ブラウザが起動したら、xpathを抽出するWebページに遷移しておきます。 xpathを抽出する操作は、以下のように行います。 #. タグ:コントロールを識別するための最上層のタグを指定します。自由入力が可能です。 #. 属性(必須):コントロールの最上層に固有の属性を指定します。自由入力が可能です。属性名に続いて、「=文字列」で属性値を完全一致で指定することができます。また「=~正規表現」で属性値を正規表現式で指定することができます。 #. 待機秒:コントロールの上にマウスカーソルを移動するために必要な秒数を指定します。 #. 走査:指定した待機秒までスリープした後、ブラウザ上のマウスカーソルの位置から抽出するコントロールを特定します。 ※ マウスクリックは不要です。クリックすると画面遷移を引き起こし期待通りの要素を取得できなくなります。 #. 検出xpath:検出したxpathを表示します。検出時以外の場合には、代表xpathの表示に使用します。 .. image:: ./img/xpathgetter2.png :scale: 40% :align: center 検出したxpathが正しいならば、次の操作を行います。 * 追加:検出したxpathをリストに追加します。 * 削除:リストで選択されたxpathを削除します。 * 編集:リストで選択されたxpathを編集するために、XPathEditorを起動します。 * GroupID:複合コントロールの場合、テスト仕様書にGroupIDを指定するかどうかを指定します。 * 了解:結果を格納して終了します。 * 取消:結果を破棄して終了します。 ※ 一つの複合コントロールに対しては、一度に、それを構成する子孫コントロールを抽出しましょう。子コントロールごとにXpathGetterを起動し閉じるよりも、効率的であり、整合性も維持しやすくなります。 ※ 複合コントロールの代表xpathを設定するためには、いずれかの子コントロールの要素を選択し、XPathEditorを起動します。最後に指定された代表xpathが複合コントロールの各要素に適用されます。  リスト中のxpathの先頭からの文字列が代表xpathに一致する場合、コントロール辞書に転記されるxpathは$ELMの置き換え用のsubxpathになります。  それ以外の場合、代表xpathから独立したもの(例:ダイアログ)として扱われ、コントロール辞書に転記されるxpathは「//」から始まります。 ※ 特殊な操作により、走査操作と追加操作を一度の手順で行うことが可能です。xpathのリストをいったん選択し、フォーカスを当ててから、ブラウザ上のコントロールにマウスカーソルを移動し、Controlキーとqキーを同時に押下します。 XPathEditorの操作 ---------------------------- .. image:: ./img/xpatheditor.png :scale: 40% :align: center スピナーを操作すると、検出したxpathから代表xpathを設定することができます。この代表xpathおよびその属性は、複合コントロールの全ての子孫コントロールで共有されます。 左のリストボックスでxpath上の要素を選択すると、その要素の属性を右のテキストエリアで編集することができます。そこでは、属性名と値の条件が改行して表示されています。 行の先頭が「//」の場合はコメントとみなされるため、出力結果に反映されません。 ※ XPathEditorにより最後に指定された代表xpathが、複合コントロールの代表xpathになります。 コントロール辞書への書き込み ----------------------------- テスト仕様書Excelにおいて、Cntrl+Shift+qキーを同時に押下します。 コントロール辞書のCntrlDicシートの末尾行に、抽出したxpathが追記されます。