ラベル autoit の投稿を表示しています。 すべての投稿を表示
ラベル autoit の投稿を表示しています。 すべての投稿を表示

2015年7月27日月曜日

[AutoIt] システム情報マクロ

AutoIt を書いていると Windows のバージョン違いによる 挙動・UI の違いが障害になることが多々あります。
AutoIt のコード側で対処する必要がありますが、そんな時に便利なのがシステム情報マクロです。

https://www.autoitscript.com/autoit3/docs/macros/SystemInfo.htm

@OSVersion
名前のまんまの機能です。OS のバージョンを参照できます。
値は、"WIN_81" のように WIN_ + OS名 となってます。詳しくは、上記リンクを参照してください。

これで、OS ごとの差異を場合分けすることができます。

@OSLang
こちらも、名前のまんまの機能です。OS の Locale がこのマクロから参照できます。
https://www.autoitscript.com/autoit3/docs/appendix/OSLangCodes.htm

言語が違うとウィンドウの名前引きに失敗してしまします。
コントロールID 指定でも良いのですが、名前引きの方が柔軟性が高いので、個人的にはこちらを利用することが多いです。




マクロは他にも色々あるので、便利に使えるのではないかと思います。
今回は以上です。それでは。

2013年4月29日月曜日

autest v1.0.0 をリリースしました

autest v1.0.0 をリリースしました。

autest は AutoIt スクリプトで Google Test のようなテストを記述できるようにするフレームワークです。

AutoIt を使用して GUI 操作の自動化をした時、実行環境やタイミングによって
予期せぬ失敗が起こることがあると思います。
autest は失敗した時に、ソースファイルと行数、期待値と実際の値を出力するので、
どこでどうして失敗したかが一目瞭然です。
[==========] Running 2 tests from 1 test cases.
[----------] 2 tests from Sample
[ RUN      ] Sample.Test
autest_test_test.au3:22 error: Value of 0
  Actual: 0
Expected: 1

[  FAILED  ] Sample.Test
[ RUN      ] Sample.Test2
autest_test_test.au3:26 error: Value of 0
  Actual: 0
Expected: 1

[  FAILED  ] Sample.Test2
[----------] 2 tests from Sample

これは特に Jenkins などで自動テストをする場合に便利です。
もちろん、テスト結果の xml 出力にも対応しています。

2013年3月19日火曜日

[AutoIt] スクリプトが Windows 8 で動作しない場合の対処

AutoIt のスクリプトを Windows 7 や Xp などで実行した場合には正常動作するのに、
Windows 8 の場合にうまくいかなかった場合の対処方法をメモっておきます。

参考にしたのは、こちら
AutoIT and windows 8 - MSFN Forum

UAC を無効にしたら動くらしいのですが、
どうやらコントロールパネルから UAC を「通知しない」にしてもダメなようです。

UAC を無効にするには、
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System/EnableLUA
の値を 0 に設定するそうです。

こちらの値を変更すると再起動が要求されます。
再起動後、ちゃんと動くようになりました。

2013年3月15日金曜日

autest 1.0.0 β をリリースしました

AutoIt 用テスティングフレームワークの autest v1.0.0β をリリースしました。

テストの自動収集、実行テストの選択、xml ファイルの出力などが出来るようになり、大分それっぽくなってきました。

もう少しコードを整理して正式リリースをする予定です。

2012年11月26日月曜日

autest 1.0.0 α をリリースしました

AutoIt 用テスティングフレームワーク autest をアルファリリースしました。
ダウンロードはこちらから

AutoIt は Windows 用のプログラム言語です。主に Windows の GUI 操作自動化に使用します。
詳しいことは、ここでは省きます。


今回、このテスティングフレームワークを作成したのは、
「AutoIt で GUI の自動テストを組んだとき、テストが失敗したときのログ出力を
しっかり書いておかないと、原因がわかりにくい」と感じたからです。

まずはアサーションの提供から
今回リリースした autest では、他のテスティングフレームワークに似たアサーションに対応しています。

サンプルを紹介します。
#include "../../include/autest.au3"

$NotepadClassName = "[CLASS:Notepad]"
$strSendTest = "hello world."

AUTEST_ASSERT_TRUE( Run("notepad.exe") )
AUTEST_EXPECT_TRUE( WinWaitActive($NotepadClassName, "", 5) )

AUTEST_EXPECT_TRUE( ControlSend($NotepadClassName, "", "Edit1", $strSendTest) )
AUTEST_EXPECT_STREQ( $strSendTest, ControlGetText($NotepadClassName, "", "Edit1") )

AUTEST_ASSERT_TRUE( WinClose($NotepadClassName) )

; 保存しますかダイアログが出るので、ここでタイムアウト失敗する
AUTEST_ASSERT_TRUE( WinWaitClose($NotepadClassName, "", 5) )

こちらのサンプルは
  • メモ帳を起動
  • 「Hello World.」と入力し
  • 入力内容を検証したのち
  • メモ帳を終了します(保存ダイアログが出るので、この処理はタイムアウトし失敗します)

実行した画面がこちらになります。



コンソールにはこのようなメッセージが出力されます。
sample.au3:30
error: Value of WinWaitClose($NotepadClassName, "", 5)
  Actual: 0
Expected: True

このメッセージから、
sample.au3 ファイルの 30行目 で WinWaitClose($NotepadClassName, "", 5) が 0 を返して失敗したということがひと目でわかります。

ビルド方法
autest のアサーション関数は通常の AutoIt のコンパイル方法でもエラーにならないよう設計されていますが、ファイルや行、コードの詳細を出力するには専用のビルド手順が必要になります。

こちらが先ほどのサンプルの Makefile になります。
SOURCES = sample.au3

build: DEFAULT_TARGETS

include $(AUTEST_ROOT)/toolchain/commondefs

Make 用の定義などはすべて commondefs ファイルに記述されています。
ユーザーが記述するのは以上になります。

あとは普通に Make するだけです。

どういう仕組みか
Make で何をしているかというと、
  1. SOURCES で定義されたファイルを '#' を "__sharp__" に置換して .obj/*.c ファイルに出力
  2. .c ファイルをプリプロセッサで処理し "__sharp__" を '#' に戻して *.pau3 ファイルに出力
    (その他 AutoIt の構文に合わせて置換しています)
  3. .pau3 ファイルを AutoIt で実行ファイルにコンパイル
というようなことをしています。
C プリプロセッサを使用して、関数引数にファイル名や行、引数の文字列を付加することで、
先に示した出力を得られるようになります。

まとめ
プリプロセッサ便利!