結果とレポーティング
これらのコマンドと関数を使用して、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