シナリオ
このサンプルと内容は同じ。
テキスト操作をUIAutomationで処理。
SikuliXでUIAutomationを使用するにはここを参照。
- メモ帳を起動(Appクラスのメソッドから起動)
- メモ帳にメッセージを書き込み
- ワードを起動(ファイル名を指定して実行から起動)
- ワードの後ろに隠れたメモ帳をアクティブにする
- メモ帳のテキストをクリア後メッセージを書き込み
- ワードを閉じる
- メモ帳のテキストをクリア後メッセージを書き込み
- メモ帳をファイル名を指定して保存
- メモ帳を閉じる
動画
サンプルコード
PowerShellスクリプト:C:¥ps¥Set-Value.ps1
Param($p)
Import-Module C:\UIAutomation\UIAutomation.dll
[UIAutomation.Preferences]::highlight = $false
$ErrorActionPreference = "Stop" # 例外をキャッチするためのおまじない
try {
$wndw = Get-UiaWindow -Name $p[0]
switch($p[1])
{
'cmb' {$wndw | Get-UiaComboBox -AutomationId $p[2] | Set-UiaComboBoxText -Text $p[3] | Out-Null}
'edt' {$wndw | Get-UiaEdit -AutomationId $p[2] | Set-UiaEditText -Text $p[3] | Out-Null}
'doc' {$wndw | Get-UiaDocument -AutomationId $p[2] | Set-UiaControlText $p[3] | Out-Null}
'key' {$wndw.Keyboard.TypeText($p[3])}
'btn' {$wndw | Get-UiaButton -AutomationId $p[2] | Invoke-UiaButtonClick | Out-Null}
}
} catch [Exception] {
return 9
}
SikuliXスクリプト
import os
import sys
import datetime
reload(sys)
sys.setdefaultencoding("utf-8")
#######################################################################
# CONSTANT AREA
#######################################################################
# PowerShellスクリプトの保存先
CMD_PATH = u"C:\\ps\\Set-Value.ps1"
# PowerShellコマンドのベース
BASE_CMD = "powershell -NoProfile -ExecutionPolicy Bypass " + CMD_PATH
#######################################################################
# FUNCTION AREA
#######################################################################
# UIAutomation 操作
# コマンド引数:1-ウィンドウタイトル 2-処理タイプ 3-AutomationID 4-値
def execUIA(wndw, type, atid, text):
# 改行をPowerShell用に変換
text = (text).replace("\n","`n")
cmd = BASE_CMD + " '" + \
wndw + "'," + \
type + "," + \
atid + "," + \
text
# コマンド実行
rtn = run(cmd)
if rtn == 9:
popup(u"powershellでエラー")
exit()
# カウントダウン
def countdown():
wndw = u"*無題 - メモ帳"
type = "key"
atid = "15"
cnt = 5
for i in range(5):
cmd = BASE_CMD + " '" + \
wndw + "'," + \
type + "," + \
atid + "," + \
str(cnt)
# コマンド実行
rtn = run(cmd)
if rtn == 9:
popup(u"powershellでエラー")
exit()
cnt = cnt - 1
wait(0.5)
# 指定画像の表示待ち
def waitprog(pic):
try:
wait(pic, 10)
except:
popup(u"タイムアウト")
exit()
#######################################################################
# MAIN
#######################################################################
# メモ帳起動
notepadpath = os.path.join(os.environ["WINDIR"], "notepad.exe")
notepad = App.open(notepadpath)
# メモ帳に書き込み
string = "---------------------------------\n"
string += u"このあとワードを起動します\n"
string += u"その後メモ帳をアクティブにします\n"
string += "---------------------------------\n"
execUIA(u"*無題 - メモ帳", "doc", "15", string)
countdown() # カウントダウン
# ワードを起動
type("r", Key.WIN) # ファイル名を指定して実行のショートカット
execUIA(u"ファイル名を指定して実行", "key", "1001", "winword.exe")
type(Key.ENTER)
# ワード起動待ち
waitprog("1616246876450.png") # 左記の画像が表示するまで待つ
# メモ帳をアクティブにする
notepad.focus()
wait(2)
# メモ帳に書き込み
string = "---------------------------------\n"
string += u"このあとワードを閉じます\n"
string += "---------------------------------\n"
execUIA(u"*無題 - メモ帳", "doc" , "15", string)
countdown() # カウントダウン
# ワードを閉じる
App.close("Word")
# メモ帳をアクティブにする
notepad.focus()
wait(1)
# メモ帳に書き込み
string = "---------------------------------\n"
string += u"このあとメモ帳の内容を保存します\n"
string += "---------------------------------\n"
execUIA(u"*無題 - メモ帳", "doc", "15", string)
countdown() # カウントダウン
# 名前を付けて保存
type("s", Key.CTRL + Key.SHIFT)
# 保存ダイアログ表示待ち
waitprog("1616254249888.png") # 左記の画像が表示するまで待つ
# ファイル名:yyyymmdd_hhmmss.txt
date = datetime.datetime.today().strftime("%Y%m%d_%H%M%S")
path = u"c:\\sample\\" + date + ".txt"
# ファイル名指定
execUIA(u"名前を付けて保存", "edt", "1001", path)
# 保存クリック
execUIA(u"名前を付けて保存", "btn", "1", "dummy")
# メモ帳を閉じる
notepad.close()
SikuliX IDE画面