目次
- Windowsのデスクトップアプリケーションの自動操作
- WinAppDriverのインストール
- WinAppDriverの動かし方の確認
- PythonのAppiumモジュールのインストール
- Appiumのサンプルプログラムで電卓を操作する
- Appiumの他の使い方はどうやって調べるのか?
- アプリケーションの識別名や画面部品のID調べ方
- 調査用ツールのインストールと実行方法の確認
- 第二回目・第三回目のリンク
Windowsのデスクトップアプリケーションの自動操作
Windowsのデスクトップアプリケーションを、Pythonから自動操作してみます。
3回シリーズの1回目です。
今回のポイントとしては。
- WinAppDriverのインストール
- WinAppDriverの動かし方の確認
- PythonのAppiumモジュールのインストール
- Appiumサンプルプログラムで電卓を操作する
- 自動操作に必要なIDやname的な情報を調べる方法の確認
- 調査用ツールのインストールと実行方法の確認
です。
WinAppDriverのインストール
動作に必要なWinAppDriverは、こちらからダウンロードできます。
WinAppDriverをダウンロードします。
同じページに、WinAppDriver UI Recorderもあるので、間違わないように。
WinAppDriver(Windows Application Driver)は、SeleniumライクなUIテストオートメーションをサポートするWindowsアプリケーション用のサービスプログラムです。
まずは、WindowsApplicationDriver.msiをダウンロードしてインストールします。
WinAppDriverの動かし方の確認
インストールが正常終了していたら、以下のプログラムを実行します。
C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe
スタートメニューとかには登録されてないので、コマンドプロンプトを管理者として実行して動かします。
たいていは、一発で動かないで以下のような画面になると思います。
Developer mode is not enabled. Enable it through Settings and restart Windows Application Driver Failed to initialize: 0x80004005
ようするに「開発者モードじゃないから動かせないよ」と言ってます。
どうも、デフォルトのモードでは無理なようです。
動作確認のため、Windowsを「開発者モード」に切り替えます。
Windowsの設定画面で「開発者向け設定」を開きます。
検索ウインドウで「開発者向け」と入力すると、選択肢としてでてきます。
開発者向け設定で、開発者モードに切り替えます。
以下のデフォルトから「開発者オード」に選択しなおします。
ただ、開発者モードはセキュリティ的なリスクがあるので、実行するとき以外はデフォルトに戻しておくようにします。
この状態で再度、WinAppDriverを実行します。
うまく動けば、以下のように待ち状態にはいります。
Windows Application Driver listening for requests at: http://127.0.0.1:4723/
Press ENTER to exit.
「http://127.0.0.1:4723/」でリスニングするってあたりが、WebDriverライクです。
PythonのAppiumモジュールのインストール
動作確認のためにサンプルプログラムを実行してみます。
Appiumの仕組を使います。
Appiumは、WindowsネイティブアプリやAndroidスマホなんかの自動テストをSeleniumみたいにやるための仕組です。
appiumをpythonから使うためにインストール
pip install Appium-Python-Client
しておく必要があります。
seleniumなども含めて、まとめてインストールする方法もあります。
robotframeworkは今回は使わないのですけどね。
pip install robotframework-appiumlibrary
Appiumのサンプルプログラムで電卓を操作する
さて、ソースコードはこちらです。
py_windriver_test00.py
import unittest from appium import webdriver class SampleTests(unittest.TestCase): def setUp(self): # set up appium desired_caps = {} desired_caps["app"] = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" self.driver = webdriver.Remote( command_executor='http://127.0.0.1:4723', desired_capabilities=desired_caps) def tearDown(self): self.driver.quit() def test_input(self): self.driver.find_element_by_accessibility_id("clearButton").click() self.driver.find_element_by_accessibility_id("num7Button").click() result = self.driver.find_element_by_accessibility_id( "CalculatorResults") self.assertIn(" 7 ", str(result.text)) def test_calc(self): self.driver.find_element_by_accessibility_id("num2Button").click() self.driver.find_element_by_accessibility_id("plusButton").click() self.driver.find_element_by_accessibility_id("num7Button").click() self.driver.find_element_by_accessibility_id("equalButton").click() result = self.driver.find_element_by_accessibility_id( "CalculatorResults") self.assertIn(" 9 ", str(result.text)) if __name__ == '__main__': suite = unittest.TestLoader().loadTestsFromTestCase(SampleTests) unittest.TextTestRunner(verbosity=2).run(suite)
補足します。
desired_caps["app"] = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"
この部分が電卓プログラムの指定です。
Microsoft.WindowsCalculator_8wekyb3d8bbwe!Appが電卓を示すショートカットです。
この名称の調べ方が結構難しいのですが、Windows10アプリの場合だと、こちらの記事がかなり参考になります。
command_executor='http://127.0.0.1:4723'
の部分で、WinAppDriverがリッスンしているURLをわたします。
あとは、「find_element_by_accessibility_id」にIDを指定して、cloickイベントでボタンを押したり、結果を取得したりしてます。
WinAppDriverを動かした状態で、上記プログラムを実行すると、電卓が立ち上がってきて、ボタンを順番に押しながらテストされていきます。
テストは「クリアボタンと番号の7を押して、7の表示を確認」と「2+7をボタンで押して答えが9になっている」のを確認するという、実に意味のないものですが、まあ、自動化のサンプルなのでとりあえず。
結果はこんな感じ。
電卓はできたので、次に電卓以外のアプリケーションでやるときに
- Appiumの他の使い方はどうやって調べるのか?
- アプリケーションの識別名や画面部品のIDをどうやって調べるのか?
をどうするのかです。
Appiumの他の使い方はどうやって調べるのか?
AppiumのAPIドキュメントは、ここにあります。
全編英語で、正直わかりやすくもありません。
対応言語も多く、ネットでさがしても、python・javascript・c#・Ruby・Javaなどいろんな言語のサンプルがでてきます。
何よりも、日本語の情報が少ないです。
でも、当面は、このリファレンスを参考にするしかありません。
アプリケーションの識別名や画面部品のID調べ方
Windowsに関して言えば、マイクロソフトが2通りの方法を提供してくれてます。
- WinAppDriver UI Recorder
- inspect.exe
です。
WinAppDriver UI Recorderは、これを動かした状態でWindowsアプリケーションを動かすとそれを記録して、かつ、C#のソースをはきだしてくれるというものです。
起動して「Record」ボタンを押してから、Windowsアプリを動かすと、以下のように記録されていきます。
inspect.exeも同じように、動作中のアプリケーションの詳細情報を確認できます。
とても詳細な情報が確認できます。
情報がありすぎて、ここから必要な情報を探すのは少々大変です。
自分は、自社開発のデスクトップアプリのテストで、繰り返し入力が必要なテストケースのみに絞って使っていますが、inspecter.exeを起動して、テスト対象のアプリケーションを動かしながら、コツコツと情報をひろう必要があったので、WebアプリをSeleniumで使うときの3倍から4倍くらい時間がかかりました。
これを使って全面的にデスクトップアプリのテストを自動化する・・とかは、現実的ではないように・・・個人的には思います。
調査用ツールのインストールと実行方法の確認
最後に。
上記で紹介したツールのインストールと実行方法だけ書いておきます。
WinAppDriver UI Recorderは、WinAppDriverと同じところからダウンロードできます。
単なるZIPファイルなので、展開して適当なフォルダにコピーして、EXEを実行すればいいです。
inspect.exeは、WindowsSDKに含まれてます。
WindowsSDKは以下からインストーラをダウンロードしてインストールします。
inspect.exeの場所は、インストールする環境で微妙に違ったりして探しにくいのですが、「"C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86\inspect.exe"」を参考にして、そのあたりを探して見つけてください。
自分は両方共、ショートカットをデスクトップにつくって使ってます。
ではでは。