オブジェクト、メッセージ、および結果のグローバルプロパティ
SenseTalkには、スクリプト環境がオブジェクト、メッセージ、特定のコマンドまたは関数の結果をどのように扱うかを影響させるために使用できる多数のグローバルプロパティが含まれています。SenseTalkがメッセージをどのように扱うかを理解していると便利です:
SenseTalkの Set
または Put
コマンドでグローバルプロパティ値を設定できます。これらのプロパティのいずれかを参照するときは、普通の変数と区別するためにプロパティ名の前に the
を使用しなければならないことに注意してください。
例:
set the searchrectangle to [1,2,2,3]
put 2 into the remoteworkinterval
以下のようにしてグローバルプロパティ内の特定の名前付きプロパティを追加または変更できます:
set the namedColors.pink to color("RGB,1.0,0.5,0.5") -- namedColors グローバルプロパティにピンクを追加し、そのRGB色値を定義します
set the listFormat's separator to " & " -- listFormat グローバルプロパティのseparator プロパティを設定します
プロパティは setoption
または setoptions
コマンドを使用して設定または更新することもできます。setoption
コマンドでは単一のプロパティを更新でき、setoptions
コマンドでは複数のプロパティを更新できます。
例:
setoption searchrectangle, [1,2,2,3]
setoptions {searchrectangle: [1,2,2,3], scriptlogging: yes}
setoption
と setoptions
はグローバルおよびローカルプロパティの使用に特化しているため、これらのコマンドのコマンド構文でプロパティ名から the
を省略します。
ローカルおよびグローバルプロパティの操作についての追加情報については、SenseTalkのローカルおよびグローバルプロパティを参照してください。
The AssertionBehavior
グローバルプロパティ
値: Exception
, Warning
, Error
, Pause
デフォルト: Exception
動作: assert
コマンドがステートメントを偽と評価した場合の assert
コマンドの動作を設定します。
例:
set the AssertionBehavior to "warning" -- アサートコマンドが与えられた条件を偽と評価した場合にスクリプトが失敗しないように、アサーションのデフォルトの動作を例外から警告に変更します
assert that x < 10 -- AssertionBehavior グローバルプロパティが以前に設定されたため、xの値が10未満でない場合に警告メッセージを記録します
The AssertionsEnabled
グローバルプロパティ
値: True
, False
デフォルト: True
動作: False
に設定されている場合、assert コマンドは無視されて実行されません。
例:
set the assertionsEnabled to false
assert imagefound("MyImage") -- このコマンドは実行されません
The AssertionPassCount
, The AssertionFailCount
, The AssertionErrorCount
, The AssertionWarningCount
, および The AssertionExceptionCount
グローバルプロパティ
値: 整数
デフォルト: 0
動作: assert
コマンドが条件を成功と評価すると、the assertionPassCount
が1増加します。 assert
コマンドが失敗すると、the assertionFailCount
、the assertionErrorCount
、the assertionWarningCount
、the assertionExceptionCount
のいずれかが増加することがあります。
例:
この例では、assert
コマンドを使用して単純な文を評価することにより、assertionPassCount
が増加します。
put the assertionPassCount -- 他のassertコマンドが実行されていないので0を出力
put 7 into x
assert x < 10 -- Trueと評価される
put the assertionPassCount -- assertコマンドの肯定的な評価のためにこのカウンターが増加したので1を出力
この少し複雑なバージョンの例は、the assertionBehavior
を変更することで、assert
コマンドが失敗した場合に例外をスローするのではなく、警告をログに記録するため、the assertionFailCount
が失敗後にアクセス可能になる方法を示しています。
set the assertionbehavior to warning -- アサーションが失敗してもスクリプトは失敗しない
put the assertionPassCount -- 他のassertコマンドが実行されていないので0を出力
put 7 into x
assert x < 10 -- Trueと評価される
Assert x > 10 -- Falseと評価される
assert x = 10 -- これもFalse
put the assertionPassCount -- assertコマンドの肯定的な評価のためにこのカウンターが増加したので1を出力
put the assertionFailCount -- 多くのassertコマンドが失敗したため、このカウンター が2回増加したので2を出力
The ThrowExceptionResults
グローバルプロパティ
値: True
, False
デフォルト: True
動作: このプロパティは、コマンド操作がエラーを結果として例外をスローするかどうかを決定します。 the throwExceptionResults
グローバルプロパティが True
に設定されている場合、コマンドや関数が result
関数を例外オブジェクトに設定するたび(ほとんどのエラー条件で発生します)、その例外はスローされ、この関数を通じてメッセージとして利用可能になります。
例:
set the throwExceptionResults to false
例:
set the throwExceptionResults to false
put url "http://someinvalidURL.com" into PageContents
log the result -- Logs 'Error 404 in HTTPStatus: Server returned status code 404'
log "Performed URL GET."
例:
set the throwExceptionResults to false
set myProcessPath to "bad/process/path"
open process myProcessPath-- プロセス起動パスが無効なため失敗しますが、エラーは発生しません
set myResult to result() -- 結果を変数に格納します
put myResult
if myResult contains "launch path ("&myProcessPath&") not valid" then
LogWarning myResult -- Logs 'STProcessException: NSTask - launch path (bad/process/path) not valid'
end if
The BreakpointsEnabled
グローバルプロパティ
値: True
, False
デフォルト: True
動作: このプロパティは、スクリプト内に設定されたブレークポイントが有効になるかどうかを決定します。 breakpoint
コマンドを使用してスクリプトの制御をデバッガーに移すブレークポイントを設定できます。 実行中にブレークポイントを無効にするには、このプロパティを False
に設定します。
例:
set the breakpointsEnabled to false
例:
#Calling Script
LoginWorkflow true -- スクリプトLoginWorkflowを呼び出し、パラメータ値"true"をスクリプトに渡します
#LoginWorkflowスクリプト
params isTestRun -- スクリプトが1つのパラメータ値を受け取るようにパラメータ化します
if isTestRun is true -- パラメータ値 "true"がスクリプトに渡されたかどうかを確認します
set the BreakpointsEnabled to false -- isTestRunの値がtrueの場合、ブレークポイントは無効になります
end if
Click "Login"
breakpoint -- BreakpointsEnabledグローバルプロパティがtrueに設定されている場合、スクリプトを一時停止します
Click "AccountDetails"
関連:
The Exception
グローバルプロパティ
値: 空、またはtry
ブロックによってキャッチされた例外を記述するプロパティリスト
デフォルト: 空
振る舞い: このプロパティは、最新のtry
ブロックのコンテキストでスローされた例外に関する情報を含みます。各try
文の始まりで、the exception
は空に設定 されます。try
ブロックで例外がスローされると、例外オブジェクトがthe exception
に入れられます。その値はその後try
ブロックのcatch
部分、または次のtry
文までの任意の時間で利用可能になります。
例外はオブジェクト(プロパティリスト)です。例外オブジェクトには、例外が単純にテキストとして描画された場合に簡単な説明を表示するテキスト値があります。しかし、それはまた、以下のプロパティの1つ以上を含む他の有用な情報も含んでいます:
名前 | 例外名または識別子 |
---|---|
reason | 例外の理由 |
location | 例外が発生したスクリプト内の位置のテキスト説明 |
callStack | callStack()関数によって返された、例外が発生した点までの呼び |
scriptError | エラーに関する具体的な情報を含むscriptErrorオブジェクト |
the exception
はグローバルプロパティ(コンテナー)であるため、スクリプトはいつでもその内容を変更することが自由です。これは例外がキャッチされたときに便利で、キャッチした例外を変更したり、例えば追加のプロパティを追加したりして、再度スローすることができます。
StandardFormat
関数は、例外オブジェクトのすべてのプロパティを表示するために使用できます:
log the standardFormat of the exception
例:
{asText:@"行2での実行時エラー:イメージが見つかりません - waitforエラー - 画面上に \"UsernameField\" というイメージが5.00秒以内に見つかりません", CallStack:[{Handler:"globalpropertiesobjmessages", Line:2, MeObjectID:"C:/Users/Carrie/Documents/Examples3.suite/Scripts/globalpropertiesObjMessages.script<SELECTION>", MessageName:"on_globalpropertiesobjmessages", MessageType:"Command", objectType:"SenseTalkFrame", RepeatIndex:0, ScriptObjectID:"C:/Users/Carrie/Documents/Examples3.suite/Scripts/globalpropertiesObjMessages.script<SELECTION>", TryDepth:1}], Help@"追加のヘルプが必要な場合は、'Image Searching'のドキュメンテーションを参照してください", ImageName:"UsernameField", Location:"globalpropertiesobjmessagesの行2", LogImage:{CaptureDate:"2017-09-20 17:58:10 -0600", CaptureHost:"GalaxyS5", CaptureLocation:[198, 126], CaptureScreenSize:[@"1080", @"1920"], Description:"", HotSpot:[147, 36], ImageLocation:"", ImageName:"UsernameField", ImagePath:"C:/Users/Carrie/Documents/Examples3.suite/Images/UsernameField.png", ImageRectangle:"", ImageSize:[295, 72], ImageTolerance:57, Pulsing:False, Scale:1, SearchType:"Smooth"}, LogMessage:"5.00秒以内に画面上に \"UsernameField\" というイメージが見つからない", Name:"イメージが見つかりません", objectType:"exception", OtherButton:"ヘルプ...", OtherHelp:"ePF/using/epf-finding-images.htm", Reason:"waitforエラー - 画面上に \"UsernameField\" というイメージが5.00秒以内に見つからない", ScriptError:{AsText:"行2での実行時エラー:イメージが見つかりません - waitforエラー - 画面上に \"UsernameField\" というイメージが5.00秒以内に見つからない", ErrorType:"実行時エラー", Line:2, Name:"イメージが見つかりません", objectType:[@"ScriptError", @"exception"], Reason:"waitforエラー - 画面上に \"UsernameField\" というイメージが5.00秒以内に見つからない"}}
例:
例外を出力します
例:
例外の名前を出力します
例:
try
"Windows VM"に接続します
catch
例外のScriptErrorを出力します -- 接続コマンドが例外をスローした場合、'行2での実行時エラー:接続に失敗しました - サーバー:192.168.120.128のポート:5900に接続できません サーバーに連絡できません:192.168.120.128:5900 (10060:操作がタイムアウトしました)'
end try
例:
try
"UsernameField"を待つ5
catch
例外のキーをログに記録します -- WaitForコマンドが例外をスローした場合、ログには'(asText,CallStack,Location,LogMessage,Name,objectType,Reason,ScriptErro)'が記録されます。
end try
例:
try
"UsernameField"をクリックします
catch
例外の"ExceptionTime"を現在の時間に設定します
例外のExceptionTimeをログに記録します -- Clickコマンドが例外をスローした場合、例外がキャッチされた時刻をログに記録します。例:'07:01 PM'
end try
例:
try
"Invalid Access", "名前またはパスワードが間違っています"をスローします
catch
例外を出力します -- "行2での実行時エラー:無効なアクセス - 名前またはパスワードが間違っています"
例外の名前を出力します -- "無効なアクセス"
例外の理由を出力します -- "名前またはパスワードが間違っています"
end try
The FrontScripts
グローバルプロパティ
値: 空、またはメッセージを処理するオブジェクトまたはオブジェクトのリスト(つまり、ライブラリまたはスクリプト)
デフォルト: 空
動作: このグローバルプロパティは、ターゲットオブジェクトがメッセージを提供される前に、メッセージを処理する機会を得るオブジェクトのリストを含むことができます。the FrontScripts
のオブジェクトはメッセージをインターセプトし、あまり望ましくないが時々メッセージをログに記録するなどのタスクに役立つ任意のオブジェクトの振る舞いを上書きする機会があります。
例:
the frontscriptsを"FileStuff"に設定します -- the frontScriptsを同じスイートの別のスクリプトに設定します
例:
the frontScriptsを("/Users/bkwins/Documents/ePFSuites/Suite17Helper.suite/Scripts/VerifyWikiSearch.script", "/Users/bkwins/Documents/ePFSuites/TableTesting.suite/Scripts/LiveScript.script")に設定します -- 2つの異なるスイートからスクリプトを使用するようにthe frontScriptsを設定します
関連:
The BackScripts
- メッセージ
The BackScripts
グローバルプロパティ
値: 空、またはメッセージを処理するオブジェクトまたはオブジェクトのリスト(つまり、ライブラリまたはスクリプト)
デフォルト: 空
動作: このグローバルプロパティは、ターゲットオブジェクトがそれを処理しなかった場合、ターゲットオブジェクトの後でメッセージを処理する機会を得るオブジェクトのリストを含むことができます。したがって、オブジェクト(ライブラリまたはスクリプト)をthe BackScripts
に挿入することで、そのオブジェクトのハンドラが任意のスクリプトで使用可能になりますが、個々のスクリプトがthe BackScript
の振る舞いを上書きするための独自のハンドラを提供することが可能になります。
SenseTalkにはthe backScripts
にオブジェクトを追加し削除するための2つの特別なコマンドがあります。start using <object>
コマンドはスクリプトまたは他のオブジェクトをthe BackScripts
に挿入します。stop using <object>
構文はあなたが以前にthe BackScripts
に挿入したライブラリやスクリプトを削除します。これらのコマンドはinsert <object> into the BackScripts
およびremove <object> from the BackScripts
コマンドと同等ですが、少しシンプルで読みやすくなっています。
例:
the backScriptsを"/Users/bkwins/Documents/ePFSuites/Suite17Helper.suite/Scripts/Units.scripts"に設定します // the backScriptsを異なるスイートのスクリプトに設定します
例:
start using "Folder1/Helper1" -- Helper1(Folder1から)をthe backScriptsに追加します
関連:
The FrontScripts
- メッセージ
The WatchForScriptChanges
グローバルプロパティ
値: True
、False
デフォルト: False
動作: このプロパティは、SenseTalkがスクリプトハンドラのキャッシュコピーを使用するか、またはソースを最初に更新チェックするかを決定します。
メッセージがディスク上に存在するス クリプトオブジェクトに送信されると、SenseTalkはそのスクリプトファイルを読み込み、スクリプトをメモリにキャッシュします。そのオブジェクトが別のメッセージを受け取ると、SenseTalkはそのメッセージのハンドラがあるかどうかを素早く確認できます。一部の(かなり稀な)状況では、ランタイム中にSenseTalkにスクリプトの更新をチェックさせたい場合があります。これらの状況では、the watchForScriptChanges
グローバルプロパティをTrue
に設定して、オブジェクトがメッセージを受け取るたびにSenseTalkがファイルを更新チェックするようにします。ファイルが更新されていた場合、再度読み込まれ、新しいハンドラが使用されます。ハンドラの実行バージョンは、実行中は変更されません。
例:
the watchForScriptChangesをtrueに設定します
テックトーク:
set the watchForScriptChanges to true
LoginのAddPassword -- Loginという名前のスクリプトに保存されたAddPasswordという名前のコマンドハンドラを呼び出します
The ResultHistory
グローバルプロパティ
値: 空、またはthe resultによって返された値のリスト。
デフォルト: 空
動作: このプロパティは、 the ResultHistoryLimit
プロパティ値までの the result
によって返された値を格納します。空でない結果が設定されるたびに、それは the ResultHistory
に挿入されます。スクリプトで the ResultHistory
を使用して、以前のステートメントから結果値を取得することができます。ただし、空の値は含まれないので、結果を特定のステートメントにマッチさせる際には注意が必要です。
put the resultHistory
例:
RunWithNewResults "Login"
put the resultHistory -- 以下を表示します ' ((handler:"SmokeTestPrimaryScript", line:"1", result:(Duration:"0.05", Errors:"0", Exceptions:"0", LogFile:"C:/Users/Carrie/Documents/Examples3.suite/Results/Login/20170920_200213.795/LogFile.txt", ReturnValue:"", RunDate:"2017-09-20 20:02:13.795 -0600", Status:"Success", Successes:"1", Warnings:"0")))'
例:
RunWithNewResults "Login"
put the resultHistoryのhandler -- コマンドを呼び出したハンドラの名前を表示します。例: 'SmokeTestPrimaryScript'
例:
GetValue -- GetValueという名前のスクリプトを呼び出し、値(例えば "1234")を返します
waitFor 8, "UsernameField" -- WaitForコマンドは、WaitForコマンドの実行にかかった時間(durationメッセージ)を返します
log the resultHistory -- 最後に実行したコマンドのコマンドメッセージをログに記録します。たとえば: '((handler:"globalpropertiesobjmessages", line:"1", result:"12213213"),(handler:"globalpropertiesobjmessages", line:"2", result:"1.856 seconds"))'
The ResultHistoryLimit
グローバルプロパティ
値: 数値
デフォルト: 100
動作: このプロパティは、the ResultHistory
グローバルプロパティに格納できる結果の最大数を設定します。
テックトーク
set the resultHistoryLimit to 25
例:
set the resultHistoryLimit to 5 -- 最も新しい5つの結果だけを格納することを許可します。
repeat 10 times
WaitFor 10, "UsernameField"
end repeat
put the resultHistory into myHistory -- 実行したWaitForコマンドの最も新しい5つの結果を格納します。たとえば: '((handler:"timings", line:"3", result:"2.141 seconds"),(handler:"timings", line:"3", result:"1.838 seconds"),(handler:"timings", line:"3", result:"1.067 seconds"),(handler:"timings", line:"3", result:"1.031 seconds"),(handler:"timings", line:"3", result:"1.075 seconds"))'
// 各結果を反復処理し、その期間(waitFor結果の結果)をリストに格納します
repeat with each myResult of myHistory
insert myResultのresult after Durations
end repeat
log "The average duration of the last 5 waitFors is "&average(Durations) -- 最後の5つの期間の平均を見つけてログに記録します。例: 'The average duration of the last 5 waitFors is 1.5756 seconds'