2010 Micro Focus K.K. All Rights Reserved
SilkTest 2010 における XPATH によるダイレクトオブジェクト認識
※)当資料は、SilkTest 2010 R1(英語版)の Open Agent 用に作成されております。
その他のバージョンや Classic Agent では、画面構成や使用できる機能、動作環境
が異なります。
マイクロフォーカス 株式会社
Application Management & Quality
2
2010 Micro Focus K.K. All Rights Reserved
目次
1 概要 ................................................................................................................................................. 3
2 SilkTest における XPATH の活用 ................................................................................................... 4
2.1 位置指定記号 ............................................................................................................................ 6
2.2 オブジェクトの種類 ................................................................................................................. 8
2.3 オブジェクトの特定 ................................................................................................................. 9
3 XPATH によるオブジェクト記述サンプル ................................................................................... 10
3.1 x列、y行のオブジェクトを指定する ...................................................................................11
3.2 ‘合計’列、y行のオブジェクトを指定する ....................................................................... 12
3.3 指定したタイトルの行を探して、‘合計’列を指定する ....................................................... 13
3
2010 Micro Focus K.K. All Rights Reserved
1 概要
SilkTest は、アプリケーションの GUI 操作を記録・再生することによって、機能テストを自
動化するツールです。テスト実行時に対象のオブジェクトを認識する方法として「XPATH によ
るダイナミックオブジェクト認識」を採用しており、汎用性のあるスクリプトを作成することが
可能です。
特に、テストスクリプトをデータドリブン形式で繰り返し実行する時や、画面の変更に自動的
に対応出来るようにする時に、XPATH の記述方法を理解しておくと効果的です。
この資料では、SilkTest で使用している XPATH によるオブジェクトの指定方法に関して記述
しています。
*)XPATH の定義に関しては、以下の URL を参照下さい。
http://www.w3.org/TR/xpath20/
SilkTest では、テストスクリプトとして VisualTest, VB.NET, C#, Java などの様々な言語を選択す
ることが出来ますが、オブジェクトを指定する記述方法には、共通で XPATH を使用します。
「図 1-1」のように、オブジェクト種類とプロパティの指定によって、画面上にある複数のオブジ
ェクトから、操作対象のオブジェクトを特定することが出来ます。
図 1-1 XPATH によるオブジェクト指定
" /BrowserWindow//Shell[@caption='SWT Test Application'] "
位置指定記号 オブジェクト種類
プロパティによる オブジェクトの指定
4
2010 Micro Focus K.K. All Rights Reserved
2 SilkTest における XPATH の活用
例えば、テスト対象のアプリケーションが「図 2-1」のような構成の場合、SilkTest は、画面
上のオブジェクトが「図 2-2」のように配置されていると認識します。
図 2-1 テスト対象画面の例
図 2-2 テスト対象画面のオブジェクト配置サンプル
※)「図 2-2」はオブジェクト配置のイメージを表すものであり、全てのオブジェクトを記述し
ているものではありません。
BrowserWindow
TD[2]
TD[3]
TD[4]
TD[5]
TD[1]
TR[1]
TD[2]
TD[3]
TD[4]
TD[5]
TD[1]
TR[2]
Table
5
2010 Micro Focus K.K. All Rights Reserved
対象のアプリケーションに配置されているオブジェクトは、「図 2-3」のようにツリー構造で管
理され、親オブジェクトから順番に指定していきます。
例えば、XPATH で“/BrowserWindow/TABLE/TR/TD”と指定した場合、①~④の順番でツ
リー構造をたどり、オブジェクトを選択していきます。
図 2-3 XPATH のツリー構造と現在位置
BrowserWindow
TABLE
TR
TD
・・・
・・・
・・・
・・・
・・・ ・・・
/BrowserWindow/TABLE/TR/TD
/BrowserWindow/TABLE/TR/TD
/BrowserWindow/TABLE/TR/TD
/BrowserWindow/TABLE/TR/TD
・・・
④
③
②
①
6
2010 Micro Focus K.K. All Rights Reserved
2.1 位置指定記号
XPATH では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな
がら検索します。階層構造になったオブジェクトを検索するため、その現在位置を示すための
位置指定記号を使用します。
説明 記号
現在位置の直下にあるオブジェクト /
現在位置の下にある全てのオブジェクト //
現在位置の一つ上にあるオブジェクト //..
No 使用方法説明
① /BrowserWindow/Table と指定する場合は、BrowserWindow の直下にある Table だけが選択されます。
BrowserWindow の下に Div があり、その下に Tableがある場合は選択されません。
② /BrowserWindow//Table と指定する場合は、BrowserWindow の下にある全ての Table が選択されます。
③ /BrowserWindow/DIV/TABLE/TR/A[@textContext=’TitleB’]の位置にあるオブジェクトは、間のオブ
ジェクトを省略して、/BrowserWindow//A[@textContext=’TitleB’]と表すことが出来ます。
図 2-4 位置指定記号によるオブジェクトの指定方法①~③
BrowserWindow
TABLE
TR
A[@textContext=’TitleA’]
DIV
・・・
・・・
/BrowserWindow/TABLE
TABLE
TR
/BrowserWindow//TABLE
A[@textContext=’TitleB’]
/BrowserWindow/DIV/TABLE/TR/A[@textContext=’TitleB’] もしくは /BrowserWindow//A[@textContext=’TitleB’]
A[@textContext=’TitleA’]
③
②
①
7
2010 Micro Focus K.K. All Rights Reserved
④ /BrowserWindow//A[@textContext=’TitleB’]/../ A[@textContext=’TitleA’]の指定は、まず[@textContext=’TitleB’]のオブジェクトを検索し、その親オジェクトに戻ってから、再度直下のオブジェクトを選択しています。
図 2-5 位置指定記号によるオブジェクトの指定方法④
BrowserWindow
DIV
TABLE
TR
A[@textContext=’TitleB’]
A[@textContext=’TitleA’]
・・・
BrowserWindow
DIV
TABLE
TR
A[@textContext=’TitleB’]
A[@textContext=’TitleA’] ・・・
BrowserWindow
DIV
TABLE
TR
A[@textContext=’TitleB’]
A[@textContext=’TitleA’]
・・・
/BrowserWindow//A[@textContext=’TitleB’] →一旦、オブジェクトを特定します
/ A[@textContext=’TitleA’] →現在位置からの相対指定で、目的のオブジェクトに到達します
/.. →ツリー構造の一つ親に移動します
8
2010 Micro Focus K.K. All Rights Reserved
2.2 オブジェクトの種類
オブジェクトの種類を選択するには、オブジェクト名を指定します。オブジェクト名にはワ
イルドカードを指定することも可能です。
種類 例 説明
オブジェクト名の直接指定 DomElement オブジェクト’DomElement’を指定
ワイルドカード指定 * 全ての種類のオブジェクトを指定
一部分のワイルドカード指定 Dom* Dom から始まる名前のオブジェクトを指定
BrowserWindow
DomTable
DomTextField
・・・
・・・
DomListBox
MyObject
/BrowserWindow/*
BrowserWindow
DomTable
DomTextField
・・・
・・・
DomListBox
MyObject
BrowserWindow
DomTable
DomTextField
・・・
・・・
DomListBox
MyObject
/BrowserWindow/DomTable
/BrowserWindow/Dom*
9
2010 Micro Focus K.K. All Rights Reserved
2.3 オブジェクトの特定
オブジェクト種類の指定で複数のオブジェクトが選択される場合、対象のオブジェクトを一
つに特定するために、プロパティ指定などの方法を使用することが出来ます。
種類 例 説明
プロパティ値の直接記述
による指定
@caption=’計算 プロパティ’caption’の値が、’計算’となっているオ
ブジェクト
プロパティ値のワイルド
カードによる指定
@caption=’計算*’ プロパティ’caption’の値が、’計算’から始まるオブ
ジェクト
インデックスによる指定 Table[1] Table オブジェクトの’1’番目のオブジェクト
条件の複合 and, or 複数の条件を記述する際に使用します
不等号条件 =, !=, <, >, <=, >= プロパティ値を不等号でチェックします
数値条件の計算 +, -, *, div, mod プロパティ値を計算します
① @textContext=’商品 A-1’によって、プロパティを直接指定しています。
② [1]によって、1番目のオブジェクトのインデックスを直接指定しています。
③ @textContext=’商品 B*’のワイルドカード指定によって選択された2つのオブジェクトから、インデックス指定[1]によって1番目のオブジェクトを指定しています。
④ textContextの値が‘商品 B’の文字で始まり、‘-1’の文字で終わらないものを複合条件で指定しています。
BrowserWindow
TABLE
TR[1]
/BrowserWindow//A[@textContext=’商品 A-1’]
/BrowserWindow//A[@textContext=’商品 B*’ and @textContext!=’*-1’]
①
②
A[@textContext=’商品 A-1’]
TR[2]
A[@textContext=’商品 A-2’]
TR[3]
A[@textContext=’商品 B-1’]
TR[3]
A[@textContext=’商品 B-2’]
/BrowserWindow//A[@textContext=’商品 B*’][1]
/BrowserWindow//A[1]
④
③
10
2010 Micro Focus K.K. All Rights Reserved
3 XPATH によるオブジェクト記述のサンプル
この章のサンプルは、「図 3-1」のような、Web から料理本を購入するアプリケーションの、
表形式になっているオブジェクト群を対象として考えます。
図 3-1 サンプル画面イメージ
図 3-2 サンプル画面のオブジェクトツリー構造
BrowserWindow
TR[1]
A[@textContext=’Best Grilling Recipes’]
A[@textContext=’Cooking for Two’]
A[@textContext=’The Best Skillet Recipes’]
TABLE
TD[1]
TD[2]
TD[5]
SPAN[@class=’productPrice’]
・・・
TR[2]
TD[1]
TD[2]
TD[5]
・・・
SPAN[@class=’productPrice’]
TR[3]
TD[1]
TD[2]
TD[5]
・・・
SPAN[@class=’productPrice’]
11
2010 Micro Focus K.K. All Rights Reserved
3.1 x列、y行のオブジェクトを指定する
サンプルアプリケーションにおいて、行と列を数値で指定する場合。
図 3-3 サンプル画面イメージ
目的 サンプル中において、2行目の2列目を指定させます。
XPATH /BrowserApplication//BrowserWindow//TABLE[1]//TR[2]/TD[2]
説明 /BrowserApplication//BrowserWindow//TABLE[1]
=>1番目のテーブル全体を指定しています。
//TR[2]
=>2行目を指定しています。
/TD[2]
=>2列目を指定しています。
12
2010 Micro Focus K.K. All Rights Reserved
3.2 ‘合計’列、y行のオブジェクトを指定する
サンプルアプリケーションにおいて、2行目のデータの中で、右端にある「合計金額」列を指
定する場合。
図 3-4 サンプル画面イメージ
目的 2行目のデータから、列の種類を指定してオブジェクトを指定します。
XPATH /BrowserApplication//BrowserWindow//TR[2]//SPAN[@class='productPrice']
説明 /BrowserApplication//BrowserWindow//TR[2]
=>テーブル上の2行目を指定しています。
//SPAN[@class='productPrice']
サンプルのテーブル中において、右端の列だけがプロパティ「class」の値とし
て、’productPrice’を持っているので、列を指定するために”SPAN[@class='productPrice']”と
記述して、オブジェクトを特定します。
※)/BrowserApplication//BrowserWindow//TABLE[1]//TR[2]/ SPAN[@class='productPrice']
と、TABLEオブジェクトを記述することも可能ですが、この場合はプロパティ指定によってオブジ
ェクトを特定しているため、中間の”TABLE[1]”を指定しなくても動作します。
13
2010 Micro Focus K.K. All Rights Reserved
3.3 指定したタイトルの行を探して、‘合計’列を指定する
サンプル中において、複数ある行の中から、タイトルが「Cooking for Two」となっているデ
ータを検出し、その行の右端にある合計金額列を指定したい場合。
※)「図 3-5」の赤枠部分と、「図 3-6」の赤枠部分は異なる行にデータがありますが、サンプル
の XPATH は商品名で検索しているので、どちらのパターンでも目的のオブジェクトを見つける
ことが出来ます。
図 3-5 タイトル検索のサンプル画面イメージ(1)
図 3-6 タイトル検索のサンプル画面イメージ(2)
14
2010 Micro Focus K.K. All Rights Reserved
目的 直接指定が困難なオブジェクトを、別のオブジェクト検索と、位置指定記号による移動で指定し
ます。
XPATH /BrowserApplication//BrowserWindow//TABLE[1]//A[@textContents='Cooking for
Two']/../..//SPAN[@class='productPrice']
説明 /BrowserApplication//BrowserWindow//TABLE[1]//A[@textContents='Cooking
for Two']
=>プロパティ「textContents」の値が、’Cooking for Two’となっているオブジェクトを特定しま
す。
/../../
=>二つ上のオブジェクト(この場合は TR[2]で表わされる、行データ)に、相対位置指定で移
動します。
//SPAN[@class='productPrice']
=>現在の位置(直前の位置指定記号で示された位置)から検索を再開し、その行の右端に
ある列を、プロパティ classの値によって指定しています。