結果とレポーティング
これらのコマンドと関数を使用して、Eggplant FunctionalのSenseTalkスクリプトによって作成される結果をカスタマイズします。(スクリプトログ記録も参照してください。)
Assert
コマンド
振る舞い: assert
コマンドを実行すると、Eggplant Functionalは指定された条件(式)を真または偽として評価します。偽と評価された場合、デフォルトでは assert
は例外をスローします。振る舞いの設定により、成功、失敗、警告をログに記録することも可能です。assert
コマンドの失敗振る舞いは 、下記の構文と例で示されるように、Assert
コマンドのプロパティを使用してインラインで設定することができます。この振る舞いは、AssertionBehavior
グローバルプロパティを使用して設定することも可能です。読みやすさを向上させるため、assert
コマンドに that
を挿入することができます。
パラメータ: Eggplant Functionalに評価させたい条件(式)。
構文:
assert {that} condition {with [warning | error | exception | pause]}
例: AssertionBehavior
グローバルプロパティを使用して、条件が偽と評価された場合の assert
コマンドの振る舞いを設定します。
set the AssertionBehavior to "warning" // 警告を生成するためにアサーションのデフォルトの振る舞いを変更します。
assert that x < 10 // AssertionBehavior グローバルプロパティが以前に設定したため、x の値が10未満でない場合、警告メッセージをログに記録します。
例:
assert that ConfirmationNumber is "128901823" with Exception "Validating the order confirmation number." // アサーションメッセージをカスタマイズします
例:
params Platform, Version, DebuggingMode
assert paramCount() is greater than 2 with error //スクリプトに最低3つのパラメータ値が渡されていることをアサートし、そうでない場合はエラーをログに記録します
Log the assertionErrorCount&&"assertions have failed." // 実行中に発生したアサーションエラーの総数をログに記録します
例:
Assert that ["iOS","Android","Windows","MacOS"] contains SUTPlatform // SUTPlatformに格納されている値が4つの許容値のいずれかであることをアサートし、そうでない場合は、実行を停止するために例外をスローします。
例:
put ReadText("ResultsUpperLeft","ResultsLowerRight") into UnfilteredResults // SUTから数字を読み取るためにOCRを使用し、それをUnfilteredResults変数に格納します
Tap "Filter" // SUTでアクションを実行してフィルターがオンになるようにします。10秒間待ちます、"FilterOn"
put ReadText("ResultsUpperLeft","ResultsLowerRight") into FilteredResults
assert FilteredResults is less than UnfilteredResults with Warning // SUTにフィルターを適用した後にOCRで読み取った数値が、フィルターを適用する前よりも小さいことをアサートします。
BeginTestCase
および EndTestCase
コマンド
動作: BeginTestCase
コマンドはテストケースを開くために使用され、EndTestCase
コマンドはテストケースを閉じるために使用されます。各テストケースは、下の例に示すように名前が付けられます。
Syntax:
BeginTestCase CaseName
actions
EndTestCase CaseName
例:
BeginTestCase "SubmitLogin"
Login // Loginという名前のスクリプトを実行します。RunWithNewResultsでスクリプトを呼び出すと、Login用の別のテストケースが自動的に作成されます
EndTestCase "SubmitLogin"
例:
Click "SearchButton"
BeginTestCase "ResultsLoaded"
WaitFor 20, "Results"
EndTestCase "ResultsLoaded"
set myResult to the result
put myResult.testcase & comma & myResult.duration & comma & myResult.starttime & CRLF after file ResourcePath ("myTimings.csv") // "Results"画像のテストケースの期間をcsvファイルに出力します
例:
BeginTestCase "A" // ケースAのレポート期間の開始をマークします
// その他のコマンドはここ に
EndTestCase "A" // ケースAのレポート期間を終了し、集めた情報をログに記録します
BeginTestCase "B" // ケースBの情報の記録を開始します
// その他のコマンドはここに
BeginTestCase "C" // ケースCの情報の記録を開始します
// その他のコマンドはここに
EndTestCase "B" // ケースBを終了し、ケースBが開始されて以降に集めた情報をレポートします
// その他のコマンドはここに
// テストケースCがまだ開いている状態で実行が終了した場合、自動的に終了して報告されます
Tech Talk
テストケース は、テストの一部に関する情報を集める目的で、スクリプト内(または実行中のスクリプト間)の任意のコードセクションをブロックするために使用されます。スクリプトの実行は複数のテストケースを含むことがあり、これらはスクリプトの連続した部分であるか、または望まれるように互いに重なることがあります。現在のスクリプト実行についての開いているテストケースの情報は、いつでもOpenTestCases
グローバルプロパティを使用して取得できます。
各テストケースで収集される情報には以下のものが含まれます:
- テストケースの期間(秒単位)
- テストケースが開いている間に記録されたエラーの数
- テストケースが開いている間に記録された成功の数
- テストケースが開いている間に記録された警告の数
- テストケースが開いている間に記録された例外の数
- テストケースの名前
- テストケースが開始された日時
各実行の最初には、実行されているスクリプトの名前で自動的に1つのテストケースが作成されます。
実行の終了時には、まだ開いているテストケースはすべて終了し、自動的に報告されます。
初期ハンドラ(スクリプト自体)はテストケースと見なされ、開かれている宣言されたテストケースがない場合、または全くテストケースが宣言されていない場合、スクリプトは唯一開かれているテストケースとして報告されます。
テストケースは重なることができます。
バージョン5.2から、Eggplant Managerは自動的にスクリプト結果からテストケースデ ータを解析し、ダッシュボードチャートでテストケースの期間を表示します。解析されたテストケースデータはEggplant Managerからエクスポート可能です。
CaptureScreen
コマンド
動作: SUTスクリーン全体のスナップショットを取得するか、プロパティリストで示された矩形を取得します。CaptureScreen
のプロパティの任意の数のリストでこのコマンドをカスタマイズすることができます。
CaptureScreen
がスクリプトの一部として実行されると、スクリーンショットはスクリプトの結果フォルダに保存されます。CaptureScreen
コマンドが選択の一部として、またはAd Hoc Do Boxから実行されると、結果のスクリーンショットはあなたのローカルユーザーのドキュメントディレクトリに保存されます(例:C:/Users/<username>/Documents/
)。
すでに知っていない場合、スクリーンショットがどこに保存されているかを知っておくと便利です。キャプチャした画像のファイルパスにアクセスする方法は、以下のようにResult
functionを使用します:
CaptureScreen
put the result -- CaptureScreenを使って前の行でキャプチャしたスクリーンショットのフルパスを返します。
JPG形式でCaptureScreen
を使用してキャプチャした画像は、画像検索に使用するべきではありません。JPG圧縮はデータロスが必要(非ロスレス)なため、同じ画像のPNGと同じ検索設定を使用して確実に一致するわけではありません。
パラメーター: パラメーターは、CaptureScreen
に2つの方法で渡すことができます。最大3つの順序付けられたプロパティを渡すか、オプションのプロパティリストを渡すことができます。
順序付けられたプロパティの渡し方
順序付けられたプロパティを使用する場合、この順序で表示する必要があります:
- ファイル名
- Rectangle
- shouldIncrement(増分番号を追加するかどうか。)
CaptureScreen
によって保存されるデフォルトのファイル形式はPNGです。画像のファイル形式、スケール、またはJPG圧縮品質を変更するには、順序付けられたパラメーターを使用する代わりにプロパティリストを渡すか、関連するグローバルプロパティの1つを使用します(CaptureScreenImageFormat, CaptureScreenScaleFactor, CaptureScreenJPGCompressionQuality)#### プロパティリストの渡し方
プロパティリストを渡すこと
オプションのプロパティリストと共に提供されるプロパティキーを使用すると、ファイル名、キャプチャ矩形を定義し、ファイル名が増分であるかどうかを選択することができます。これは、順序付けられたプロパティを渡すときと同じように行うことができます。しかし、これには、プロパティリストとして画像関連情報を渡し、スクリーンショットのファイル形式、スケール、圧縮品質を設定する機能が追加されます。
FileName
(または同義語ImageName
またはName
): デフォルト: "Screen_Capture". 画像ファイル名とオプションのパス情報。Rectangle
(またはRect
): 座標ペア。デフォルト: リモート画面全体. このプロパティキーを使用して、キャプチャしたいリモート画面のエリアの左上と右下の角を示す座標ペアを渡します。Increment
: ブール値。デフォルト: オフ。 画像に自動的に増分番号を追加するかどうか。このプロパティはブール値を取ります:true
またはfalse
、yes
またはno
。 増分は、スクリプト内で複数のスナップショットをキャプチャしている場合(ループや頻繁に呼び出されるハンドラーのような場合)に便利です。画像はすべて同じ画像名を持つことができ、増分番号がそれらを区別します。そうでなければ、各画像は同じ名前の前の画像を上書きします。ImageInfo
: 画像プロパティリスト。 画像情報を提供したい場合、ImageInfo
を使用してプロパティリスト経由でパラメータを渡すのが良い方法です。ImageFormat
: PNG、JPG、または TIFF。デフォルト: PNG.CaptureScreen
によって使用されるファイル形式を変更します。オプションには、PNG
、JPG
、TIFF
が含まれます。ScaleFactor
: 0-1。デフォルトは1 (フルサイズ)。 これにより、画像の解像度を削減しながら比例的に画像をスケールすることができます。例えば、ScaleFactor
を .5 に設定すると、画像の寸法 (高さと幅の両方) が半分になります。これは画像検索に使用されるスケールファクターとは異なります。検索目的でキャプチャした画像のスケール方法の詳細については、Finding Images ページの Image Scaling を参照してください。JPGCompressionQuality
: 0-100。デフォルト: 100 (無圧縮; 可能な限り非可逆). JPG 形式のスクリーンショットの圧縮品質をCaptureScreen
コマンドで調整します。数字は圧縮中に保持される画像品質のレベルを示し、0% は画像データの損失が多い低品質、100 は圧縮が可能な限り100% の元の品質を保持することを意味します。
構文:
CaptureScreen {fileName {, rectangle {, shouldIncrement}}}
CaptureScreen optionsPropertyList
戻り値: キャプチャしたスクリーンショットのフルパスは、Result Commandを使用してアクセスできます。
例:オプションのプロパティリストと共に CaptureScreen
を呼び出す
この例では、キャプチャするスクリーンショットの名前、キャプチャエリアの矩形 (一つの角の座標と他の角の画像によって定義) を渡します。また、Increment
の値を true に設定することで、キャプチャされたスクリーンショットは増分的に名前付けされます。
CaptureScreen {Name: "ImageFileName", Rectangle: [[67, 33], imagelocation("OtherCorner")], increment:true}
この例では、the SuiteInfo functionを使用してスクリーンショットの保存用の画像パスを定義し、キャプチャ rectangle
を定義します。
CaptureScreen {name:SuiteInfo().ImagesFolder & slash & "CurrentLogo", rectangle:["WelcomeImage", "Border"]}
この例では、ImageFormat
、ScaleFactor
、および JPGCompressionQuality
プロパティを使用して、画像ファイルの種類、サイズ、品質を 調整します。また、スクリーンショットの名前を "RegressionTest" という変更しない名前と現在の日付を使用して名付けします。
CaptureScreen {name: "RegressionTest" & today, rectangle: ["TLImage","BRImage"], imageFormat: JPG, scaleFactor: .75, JPGCompressionQuality: 85}
例:順序付けされたパラメータを使用して CaptureScreen
を呼び出す
この例では、順序付けされたパラメータを使用して CaptureScreen
を呼び出す方法を示しています。すべての三つのパラメータを渡し、保存する画像の名前と場所を最初の fileName パラメータとして宣言し、次に Rectangle パラメータとしてキャプチャするエリアの左上と右下の角を定義する座標のリストを渡し、最後に shouldIncrement パラメー タとして "true" を渡します。
CaptureScreen "~/Documents/ScreenCaptures/TestScreenshot", [58,579,714,736], true
例:
この例では、プロパティリストを使用して画像名を渡し、画像名をインクリメンタルにしこの例では、プロパティリストを使用して画像名を渡し、画像名をインクリメンタルにします。この行がスクリプトで初めて呼び出されると、"LoginScreen_0001"という名前の画像ファイルがキャプチャされ、同じスクリプトが実行されるたびに次に"LoginScreen_0002"という名前の画像ファイルがキャプチャされ、以降も同様です。
CaptureScreen name:"LoginScreen", increment:Yes
例:
新しい状態が表示されていることを確認するための適切な要素がない場合、以前の状態からページが変わったことを判断するためにこのようなスクリプトを使用します。
Repeat at least once until not imagefound(image:RxResult, waitFor:0) -- 最初のイテレーションのみ、"not imagefound()"の条件を無視して少なくとも一度繰り返す特殊なリピートループ。以降のイテレーションでは、imagefound関数はCaptureScreenコマンドによってキャプチャされたスクリーンショットを検索します。
put ImageLocation("RxNumberUpperLeft") into RxLocation -- RxNumberUpperLeftのホットスポットの位置をRxLocation変数に保存します
CaptureScreen {name:"PrescriptionNumber", Rectangle:[RxLocation, RxLocation + [140,100]]} -- RxLocationの右側に表示されるユニークな番号のスクリーンショットをキャプチャします。
put the result into RxResult -- CaptureScreenスクリーンショットのフルファイルパスを保存します
Click "ClosePrescription" -- 画面が変わる原因となるアクションを実行します
wait 1
if the repeatIndex = 5 then Throw "Image not Found","Closing the current prescription did not work." -- リピートループが5回繰り返された場合、例外を投げます
end repeat
例:
ページの最下部までスクロールしたことを検出するために、このようなスクリプトを使用します:
put RemoteScreenSize() into DUTScreenSize -- SUTの解像度をDUTScreenSizeという名前の変数に保存します
put [.25*DUTScreenSize.x,.25*DUTScreenSize.y,.75*DUTScreenSize.x,.75*DUTScreenSize.y] into ClippingRectangle -- SUTサイズのサブセットである四角形を作成します。サブセットを使用すると、画面上の動的な要素(例えば、時計や通知領域)をキャプチャするのを避けるのに役立ちます。
CaptureScreen {Name: "state", Rectangle: ClippingRectangle} -- ClippingRectangle座標を使用してSUTのスクリーンショットをキャプチャします
put the result into refImage -- 後で簡単に参照できるように、保存したCaptureScreenスクリーンショットのファイルパスを変数に保存します
repeat at least once while not imageFound (image:refImage, searchRectangle:ClippingRectangle, waitFor:0) -- 元々キャプチャされた場所でCaptureScreen画像を検索し、少なくとも一度はSUTに対してスクロールアクションが実行されることを保証します。 スクロールイベント後にsearchRectangle内にCaptureScreen画像が存在する場合、リピートループを終了します。
CaptureScreen {Name: "state", Rectangle: ClippingRectangle} -- スクロールアクションが発生したことを反映して新しいCaptureScreen画像を作成します
put the result into refImageSwipeUp -- ページを下にスクロールするためのスクロールアクションを繰り返します
Wait 2.5 -- 一般的に、UIが動きを止めるのを待つ時間が必要です
end repeat
例:
画面上の要素、例えばビデオプレーヤーなどが変化しているかどうかを判断するために、このようなスクリプトを使用します:
put imageLocation("VideoNameHeader") into VideoLoc -- 変化する要素の参照画像の位置を保存します
[VideoLoc,VideoLoc+[250,230]] を myRectangle に入れる -- VideoLoc に保存された位置と、右に 250 ピクセル、下に 230 ピクセルのオフセットを使用して、長方形を作成します
CaptureScreen{name:"VideoCheck",rectangle:myRectangle} -- myRectangle に保存された長方形を使用して、CaptureScreen によってキャプチャされる画面の一部を指定します
結果を imageFilePath に入れます
searchRectangle を myRectangle に設定します -- 検索エリアを CaptureScreen が使用した画面の同じ部分に限定します。
imagefound (image:imageFilePath, waitfor:0) がなくなるまで繰り返します -- CaptureScreen 画像を検索するのを繰り返します
3 秒待つ -- CaptureScreen 画像を再度検索する前に、要素に変化する余裕を与えます
もし repeatIndex が 10 より大きいなら、"Video stream exception", "The video is not advancing." をスローします -- 要素が repeat ループの 10 回の繰り返し後に変化しない場合、スクリプトの実行を停止する方法を提供します
end repeat
searchRectangle を empty に設定します -- searchRectangle を全画面に戻します
関連するグローバルプロパティ:
ColorAtLocation
関数
動作: 指定した位置のピクセルの色値を返します。 座標は SUT の左上角からの相対座標です。左上角は (0,0) で、x 値は右に、y 値は下に増加します。
パラメータ: 一つの座標位置、画像、またはテキスト(OCR)参照。
戻り値: 指定された位置のピクセルの色値。詳細は、SenseTalk Reference Manual
の 色との作業を参照してください。
構文:
ColorAtLocation( xCoordinate , yCoordinate )
ColorAtLocation( point )
例:
log ColorAtLocation(593,110)
例:
if imagefound(Text:"Document") then
put colorAtLocation( the topleft of FoundImageInfo().imagerectangle) into myColor //SUT上の文字列"Document"の左上角から左に5ピクセルのピクセルのRGB値を決定します
if myColor=color("black") then //color関数を使用して黒のRGB値を返し、それを実際のRGB値と比較します
LogSuccess "Black background"
else
LogWarning "Background color" && myColor && "unexpected."
end if
end if
例:
Set the ColorFormat to "HTML" //ColorAtLocation()とColor()が返す色形式を16進数に変更します
put ColorAtLocation ("StatusIndicator") into myColor
If myColor isn't "#AFF7DF" then LogError "Color is not #AFF7DF. Color is " &myColor&period
CompareScreen
コマンドまたは関数
振る舞い:CompareScreen
は、画面またはウィンドウの変更を確認するためのコマンドまたは関数として使用します。通常、スクリプトがSUTで新しい画面やウィンドウを表示する結果としてアクションを実行した直後にCompareScreen
を呼び出します。違いが検出された場合、Eggplant FunctionalのCompare Screenパネルを使用して進行方法を決定します。
CompareScreen
は、現在のSUT画面とベースライン画像を視覚的に比較します。ベースライン画像は最初のパラメータとして指定されます。ベースライン画像が存在しない場合、その画像名に対してCompareScreen
が初めて実行されるときに自動的にキャプチャされます。
CompareScreen
を矩形を指定せずに使用すると、比較は現在のSUT画面全体に適用されます。オプションで、画面の一部(単一のアプリケーションウィンドウなど)のみが比較に含まれるように、矩形を指定することもできます。与えられた矩形(または現在のSUT画面のサイズ)がベースライン参照画像と異なる場合、例外がスローされます。
CompareScreen
が実行されると、スクリプトはスイートのImagesフォルダ内の特別な[Baseline_Screens]フォルダ(またはアクティブなヘルパースイート)でベースライン画像を探します。その名前の画像が見つからない場合、初期のベースライン画像が自動的にキャプチャされて保存され、スクリプトはこれ以上のアクションなしで進行します。
[Baseline_Screens]フォルダは、スイートでCompareScreen
を初めて実行するときに自動的に作成されます。このフォルダを自分で作成する必要はありません。
既存のベースライン画像が存在する場合、その画像は現在のSUT画面(またはSUT画面の指定された矩形)と比較されます。比較は、ベースライン画像の検索基準(例えば、検索タイプ、許容範囲)を使用して行われます。スイートのImagesペインからベースライン画像を開き、これらのプロパティを必要に応じて調整することができることに注意してください。これは将来の比較に影響します。
CompareScreen
をコマンドとして呼び出すと、比較の後の振る舞いはCompare Screen Actionモードによって制御されます。これはEggplant FunctionalのRunメニュー(Run > Compare Screen)またはthe CompareScreenAction
グローバルプロパティを使用して設定できます。Compare Screen Actionモードは以下のように設定できます:
- **Show Panel:**画面の違いが検出されると、Compare Screenパネルが開きます。
- **Log Warning:**画面の違いが検出されると、ログに警告メッセージが記入されま す。
- **Log Error:**画面の違いが検出されると、ログにエラーメッセージが記入されます。
- Show Panel Always:
CompareScreen
コマンドが画面の違いを検出するかどうかに関係なく、Compare Screenパネルが常に開きます。
Compare Screenパネルの使用については、Eggplant Functional for UI TestingでのCompare Screenの使用を参照してください。
CompareScreen
を関数として呼び出すと、Compare Screen Actionモードの設定は無視されます。Compare Screenパネルは表示されません。重要な違いが見つからない場合、関数は空のリストを返します。
基準画像と現在のSUT画面との間に差異がある場合、関数は後で結果パネルから差異をレビューできるように、実行ログに差異の情報を記録します。また、各画面の差異がこれらのプロパティを持つ1つのプロパティリストであるプロパティリストのリストを返します:
- **difference:**新規、欠損、移動、変更
- **differenceType:**テキスト、エレメント、エリア、ダイナミックテキスト、ダイナミックコンテンツ
- **source:**基準、現在、結合
- **rectangle:**基準のSenseTalk矩形
_differenceType_がテキストの場合、これらのプロパティも存在します:
- **text:**基準テキスト
- **textNow:**現在のテキスト
_difference_が移動の場合、このプロパティも含まれます:
- **rectangleMovedTo:**現在の画面上の目的地のSenseTalk矩形
以下の_difference_と_differenceType_の組み合わせが可能です:
- 新規:_differenceType_はテキストまたはエレメントです
- 欠損:_differenceType_はテキスト、エレメント、ダイナミックテキスト、またはダイナミックコンテンツです
- 移動:_differenceType_はテキストまたはエレメントです
- 変更:_differenceType_はテキスト、エレメント、またはエリアです
CompareScreen
をコマンドとして呼び出すと、差異のリストはスクリプトの次の行でresult()
関数を呼び出すことでスクリプト内で利用可能になります。
**パラメータ:**画像名と(オプションの)指定した矩形。
Syntax:
CompareScreen baselineName
CompareScreen baselineName, rectangle: rectangle
CompareScreen name: baselineName, rectangle: rectangle関数: CompareScreen baselineName
CompareScreen baselineName, rectangle: rectangle
CompareScreen name: baselineName, rectangle: rectangle
例:
フルスクリーン比較のCompareScreen
コマンド、最初に実行すると画像をキャプチャします:
CompareScreen "tutorialSut"
例:
特定の矩形比較のためのCompareScreen
コマンド:
CompareScreen name: "tutorialSut_menu", rectangle: (22,575,415,640)
例:
画像に基づいて特定の矩形を定義し、CompareScreen
コマンドを使用し、その後、result
関数を使用して変更リストを保存する方法:
CompareScreen "calcHist", rectangle:("Calculator_A","Calculator_B")
put the result.archive into ChangeHist
例:
CompareScreen
の結果は変数に保存されます:
put CompareScreen("HomeScreen") into homeDiffs
例:
差異が検出された場合にメッセージをログに記録します:
if CompareScreen("LoginPanel", rectangle:[100,100,500,400]) isn't empty then log "There were differences"
例:
CompareScreen
からの結果を示すログメッセージを作成します:
log "Diffs: " & CompareScreen(Name: "NewAccount", Rectangle:["AcctWindowTopLeft","AcctWindowBottomRight"])
関連:
Log
コマンド
動作: スクリプトのログファイルにエントリを作成します。複数のメッセージパラメータを設定すると、各メッセージが別々のエントリとして挿入されます。(the ScriptLogging
グローバルプロパティの値がMinimal
またはSilent
の場合、このコマンドは何もしません。)
パラメーター: 1つ以上の Log
メッセージ。
Syntax:
Log message
例:
Log "Beginning the login sequence now."
例:
log "Today is" && the long date & period -- long date functionの出力と文字列を結合する
例:
log "This is my first message.", "This is my second message" -- 各メッセージを結果の別々のログエントリとしてロ グに記録
ログエントリは、特定のログイベントが実行中にどこで発生しているかを判断しやすくします。
LogError
コマンド
動作: Log
および LogWarning
コマンドと同じように動作しますが、ログエントリを赤いテキストで表示し、スクリプトを失敗としてログに記録します。