本付録では、Sun WorkShop Visual 再現のスクリプトで使用されるキーワードについて説明します。
Sun WorkShop Visual 再現スクリプトのキーワードは、機能に応じて以下に示すように区分することができます。
push は指定されたウィジェット上でのマウスボタンを使用したクリック (マウスボタンを押して離すという動作) をシミュレートします。with キーワードを使用すると、特定のマウスボタンを指定することができます。このキーワードを使用しない場合は、ボタン 1 (マウスの左ボタン) が使用されます。キーボード修飾子 (Shift キーなど) を使用して、マウスボタンイベントの置換を拡張することができます。使用できる修飾子は Alt、Ctrl、Shift です。
doubleclick は、マウスの左ボタンを使用したダブルクリックをシミュレートします。このキーワードはどのウィジェットにも使用できますが、テキストウィジェットから選択する場合に特に便利です (「テキスト入力」を参照)。
ウィジェットの中には、マウスをクリックする位置は重要ではないものもあります。たとえば、ボタンウィジェット上のどの部分をクリックしても、そのボタンは活性化されます。しかし、位置が重要となるウィジェットもあります。たとえば、スケールウィジェット上では押す位置によって結果が異なります。
以下の表に、位置に依存するウィジェットと位置に依存しないウィジェットを示します。
位置非依存ウィジェット
|
位置依存ウィジェット
|
---|---|
テキストウィジェット 1 |
|
位置依存リストの残りのウィジェットの記録および再生については、「ボタンアクション (位置に依存した制御)」を参照してください。
cascade は、メニュー操作の記述を簡略化した方法です。これ以外にも、対応するカスケードボタンを押すか、キーボードアクセラレータを使用して、メニューを表示することもできます。また、メニューオプションも同じように、アクセラレータまたはキーボードニーモニックを使用して選択することができます。
cascade で表示するプルダウンメニューを使用して、選択を行うことができます。選択項目は、ウィジェット (すなわちそのメニューのオプション) またはプルライトメニューを表示するカスケードボタンです。
in ApplicationShell
cascade format_menu
pullright character_menu
option character_menu::bold
次の例では、オプションメニュー自体がユーザー入力に応答性がある場合に限りオプションの選択を行います。
if IsSensitive(myoptionmenu->OptionButton)
option myoptionmenu::thisoption
endif
オプションメニューの現在の設定 (すなわち、直前に選択された設定) を確認したい場合は、次の例に示すようにオプションメニューの menuHistory リソースを調べるだけでわかります。
if myoptionMenu->menuHistory: select_yes
message he said yes
endif
キーボード入力は、フォーカスを持つウィジェットに送られます。Sun WorkShop Visual 再現では、キーボードから入力するための追加プログラミングは必要ありません。
ユーザーもテストスクリプトも、テキストを入力する際はウィンドウマネージャを使用する必要があります。明示的なフォーカスの置かれている位置 (ウィンドウをクリックしてフォーカスを得る必要があります) で、このウィンドウマネージャをテストスクリプト内にプログラミングする必要があります。
アプリケーションにおける大部分のテキストウィジェットは、1 行データ入力 (ファイル選択ボックスの選択フィールドなど) に使用されます。Sun WorkShop Visual 再現を使用すると、フィールドのデフォルトの内容を既知の値に置換して結果を調べることができます。
type は、テキストをテキストウィジェットに入力します。doubleclick は単語の選択を、multiclick は行の選択をそれぞれプログラミングします。テストスクリプトでは、行中の単語数に関係なくテキストフィールドの内容を置換したい場合に、multiclick が最もよく使用されます。
一部のウィジェット (描画領域など) では、クリックする場所が重要になります。描画領域の場合は、描画領域内の位置が必要です。リストの場合は、選択した項目の指定が必要です。上記バージョンの push は、そのような位置に依存したウィジェットを対象としたコマンドです。
このようなウィジェットでは大部分の場合、クリック以外の操作が必要です。ある位置でボタンを押し、別の場所で離す必要があります。Sun WorkShop Visual では、フォームに対する配置エディタ上でウィジェット間にアタッチメントを設定する場合がその一例です。この設定はサーバーグラブに関係する場合があるので、最初の部分はボタンを押す位置を記述し、2 番目の部分はボタンを離す位置を記述するような単独の drag 操作として記述されます。
この機能は、アプリケーション内での描画領域など、ユーザー定義ウィジェットの単一インスタンスに使用することができます。また、ウィジェットクラス全体に (XmList、XmScale、XmScrollBar、他社の各種ウィジェットセットの場合のように) 使用することもできます。
最初の例は、Motif の描画領域ウィジェットが Sun WorkShop Visual テスト用に実装される様子を示しています。
in ApplicationShell
push tree_da(mybutton,centre)
次の例は、Sun WorkShop Visual のフォームレイアウトエディタでインタフェースウィジェットと button_box ウィジェットの間でアタッチメントが作成される様子を示しています。
in form_layout
drag layout(frame1,right)-layout(button_box,left)
独自に作成した位置に依存するウィジェットまたは他社のウィジェットを処理する方法については、「Sun WorkShop Visual 再現ウィジェットセットの拡張」を参照してください。
tree、dump、snapshot の各コマンドを使用すると、アプリケーションインタフェース内のウィジェットの構造、およびそれらのウィジェットに割り当てられているリソースの値を分析することができます。分析結果は、標準エラーに表示されます。
tree は、指定したウィジェットのウィジェット階層内にあるウィジェット名の回帰的リストを表示します。
dump は、指定したウィジェットのリソース設定を表示します。
snapshot は、指定したウィジェットのリソース設定、および指定したウィジェットのウィジェット階層内にある残りのウィジェットすべてのリソース設定を表示します。
次のコマンドは、button1 ウィジェットに割り当てられているリソースを表示します。
in ApplicationShell
dump button1
button1():
Boolean ancestorSensitive:true
HorizontalDimension width:58
VerticalDimension height:22
Pixel background:color('black')
Pixel foreground:color('#72729F9FFFFF')
HorizontalDimension highlightThickness:1
Pixel highlightColor:color('black')
XmString labelString:'Button A'
Pixel armColor:color('red')
次のコマンドは、form1 ウィジェットのウィジェット階層を表示します。
in ApplicationShell
tree form1
rowcol1():
buttonA():
button2():
address_area():
label1():
text1():
delay duration
message text
sequence text
shell command
setenv env-var env-value
breakpoint widget
exit status
delay を使用すると、スクリプト内に一時停止を挿入することができます。これは、実行中に特定の場所でアプリケーションを視覚的に確認したいときに便利です。スクリプト内の次のアクションは、一時停止後に続行されます。
message は、標準エラーにメッセージを表示します。このコマンドを使用すると、スクリプトの異なる部分にラベルを付けて、予想される結果およびエラーをユーザーに通知します。メッセージテキストは、引用符で囲む必要はありません。
sequence を使用すると、スクリプトの異なる部分にラベルを付けることができます。そしてエラーが生じると、ラベル付けされている次のシーケンスまでスキップし、そこから続行することができます。
sequence を使用するには、 -skip-on-error フラグを設定した状態で visu_replay を呼び出す必要があります。 visu_replay はデフォルトでは -user-on-error フラグを設定した状態で実行し、エラーが生じるとテストを中止してそのままアプリケーション内に残ります。残りのエラーフラグ ( -exit-on-error ) は、エラーが生じるとアプリケーションを終了します。
shell は、スクリプトからシェルコマンドを実行します。シェルコマンドが終了すると、スクリプトは処理を続行します。この機能を使用すると、ユーザーアクションをただ再実行するよりもはるかに幅広い操作を行うスクリプトを作成することができます。
setenv は shell コマンドとともに使用して、環境変数を介してシェルに情報を引き渡します。setenv は 2 つの引数をとります。最初の引数は変数の名前で、2 番目の引数はウィジェットのリソース値と以下の簡易関数のいずれかを結合できる式です。
breakpoint はデバッガとともに使用して、指定したウィジェットが活性化された際にスクリプト内にブレークポイントを設定します。こうすることによって、個々のウィジェットの内部を調べることができます。
breakpoint キーワードを含むスクリプトは、次のように呼び出す必要があります。
visu_replay -f script debugger app
上記の script はスクリプトの名前、 debugger はデバッガの名前、 app はスクリプトがテスト実行するアプリケーションの名前です。デバッガは、Sun WorkShop Visual 再現が実行します。breakpoint キーワードで、ブレークポイントを直接設定しているのと同じようにアプリケーションが停止します。これで、アプリケーションが最適化されていても、ウィジェット内部を調べることができます。
ウィジェットを押した後で 5 秒間遅延させるには、次のように記述します。
in ApplicationShell
push mywidget
delay 5
push yourwidget
ウィンドウマネージャ装飾を付けないで、シェルの画面ダンプを撮影するには、次のように記述します。
in ApplicationShell
setenv ID WindowId(ApplicationShell)
shell xwd -id $ID -out /tmp/shell.xwd
ウィンドウマネージャ装飾を付けて、画面ダンプを撮影するには、次のように記述します。
in ApplicationShell
setenv ID WindowFrame(ApplicationShell)
shell xwd -id $ID -out /tmp/shell.xwd
カスケードボタンの名前しか分からないプルダウンメニューの画面ダンプを撮影するには、次のように記述します。
in ApplicationShell
push cascade_button
setenv ID WindowId(cascade_button->subMenuId)
shell xwd -id $ID -out /tmp/shell.xwd
オプションメニューを使用して同じ動作をするには、次のように記述します。
in ApplicationShell
push option_menu.OptionButton
setenv ID WindowId(option_menu->subMenuId)
shell xwd -id $ID -out /tmp/shell.xwd
カスケードボタンの親の背景色を表示するには、次のように記述します。
in ApplicationShell
setenv ID Parent(cascade_button)->background
shell echo The Color $ID
Sun WorkShop Visual 再現のコマンドセットの使用目的は、ユーザーアクションを再生したり、アプリケーションのウィジェット階層やリソース設定に関するアプリケーションの状態を確認することです。以下に示すように、必要に応じて独自のコマンドを追加しても、まったく問題はありません。
import を使用すると、独自のコマンドのモジュールをスクリプトに読み込むことができます。一度モジュールを読み込むと、モジュール内のコマンドは user コマンドを使用して呼び出すことができます。呼び出すモジュールの数には制限はありません。
import mymodule
in ApplicationShell
cascade file_menu
select fm_print
in print_dialog
user myscreendumper print_dialog
実行する必要のあるアクションがウィジェット階層への拡張アクセス、またはプログラム内部の検査とは関係ない場合は、shell および setenv のインタフェースが優先経路です。後者の場合は、「独自の Sun WorkShop Visual 再現機能コマンドの追加」を参照してください。
Sun WorkShop Visual 再現では、ウィジェット名はウィジェットを参照するときに使用します。ウィジェットベースのテストツールの主な処理の 1 つが、正しいウィジェットを識別することです。命名規約は、複雑すぎずかつ明確である必要があります。
Sun WorkShop Visual 再現が使用している規則は、以下のとおりです。
in ApplicationShell
push mywidget
in ApplicationShell
push myradiobox.mytogglebuttongadget
in ApplicationShell
push myradiobox.unnamed
in ApplicationShell
push mywidget#17
push myradiobox.unnamed#3
push myradiobox#2.unnamed#2
in ApplicationShell
tree ApplicationShell
これで、ウィジェット階層の回帰的リストが出力されます。リストには、実際のウィジェット名が含まれます。また、Sun WorkShop Visual 再現で使用する名前と実際の名前が異なる場合は、Sun WorkShop Visual 再現で使用する名前も括弧で囲んで表示されます。
in myshell#2
push button1
in myshell#3
push button2
1. ユーザーとテキストウィジェットとの対話の記録および再生については、「テキスト入力」で説明します。
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |