Transcript
Page 1: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

2010 Micro Focus K.K. All Rights Reserved

SilkTest 2010 における XPATH によるダイレクトオブジェクト認識

※)当資料は、SilkTest 2010 R1(英語版)の Open Agent 用に作成されております。

その他のバージョンや Classic Agent では、画面構成や使用できる機能、動作環境

が異なります。

マイクロフォーカス 株式会社

Application Management & Quality

Page 2: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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

Page 3: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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'] "

位置指定記号 オブジェクト種類

プロパティによる オブジェクトの指定

Page 4: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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

Page 5: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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

・・・

Page 6: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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’]

Page 7: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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’] →現在位置からの相対指定で、目的のオブジェクトに到達します

/.. →ツリー構造の一つ親に移動します

Page 8: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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*

Page 9: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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]

Page 10: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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’]

Page 11: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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列目を指定しています。

Page 12: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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]”を指定しなくても動作します。

Page 13: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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)

Page 14: SilkTest 2010 における XPATH によるダイレクトオブ … では、ツリー構造で管理するオブジェクト情報を、親から順番に現在位置を変えな

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の値によって指定しています。


Top Related