[Robot Framework] Windows Applicationのテスト自動化を構築からスクリプティングまでやってみる

# はじめに

Windows Applicationをテスト自動化を行いたい。
幸いに、キーワード駆動の Robot Framework にいくつか Windows Applicationのテストを行うライブラリがある。その中でここでは FlaUILibrary を用いる。
※Appiumをつかって自動化することもできる。ただドライバ回り構築必要で少し大変です。


今回、windows 環境に robot frameworkの環境構築から、Windows Applicationの簡単な処理の作成、実行までを初心者でもできるようにドキュメント化した

# セットアップ

## Python

Pythonサイトから、Stable Releasesのバージョンをダウンロードする

https://www.python.org/downloads/windows/


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/74029cae-e438-dc81-6aba-e0ace7a7a990.png)

「Add python.exe to PATH」のチェックを入れて、どこからでも実行できるようにする。
その後、「Install Now」をクリックし、インストールを完了させる。

任意の場所でコマンドプロンプトを開き、以下コマンドを実施し、動作確認をする

```
python --version
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/3c7bbc6c-e38a-cb10-96a2-1a12de425574.png)


## robot framework

robotframeworkでWEBアプリケーションのテストを行うライブラリをインストールする

```
pip install robotframework
```

次に、robotコマンドを実行する

```
robot
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/e2c03f89-926c-b0f0-32a8-794e088f7b1e.png)


※なお、環境やログインユーザーによって、上記 robotのPATHが正しく通ってなく、動かない可能性がある。
その場合、 pipでインストールしたライブラリが、個人のpython folderにインストールされているからです。
その場合、そのfolderもPATHに追加する必要がある

その時、環境変数のpathに追加するfolderは以下のとおりである。

```
%UserProfile%\AppData\Roaming\Python\Python312\Scripts
```

まず、exploreで対象folderが存在することを確認する。
その後、exploreで開いたパスを環境変数のpathに追加設定する
追加後に、改めてコマンドプロンプトを開き、実行できるかを確認する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/fdec04c9-eb67-ce42-036b-16d780fe79da.png)


## robotframework flaui library

次に、WEBのテストを行うライブラリ flaui libraryをインストールする

```
pip install --upgrade robotframework-flaui
```

## Inspect

Windows SDK に、Chrome Developer toolと同じように、要素のlocatorを取得するツール、Inspectが含まれています。

最低限のSDKを選ぶとき、以下の２つパッケージを選ぶ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/dcf54e3e-afaf-ff57-d20b-80c62486a2d2.png)



https://developer.microsoft.com/ja-jp/windows/downloads/sdk-archive/


インストールが終わると、インストールしたフォルダ以下にinspect.exeが存在する。
こちらをクリックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/d3493d3c-655b-88c0-4749-74762dcf6d22.png)


以下のようなアプリが立ち上がり、windowsアプリのlocator情報をとることができる。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/180fdb26-a5e3-8832-dbb6-2396f6019018.png)


XPath取得

例えば、電卓の"C"ボタンのXpathを取得する
"C"をクリックすると、Inspectで属性情報が出てくる
ClassName = "Button"
AutomationId = "clearButton"

この場合、XPathは <b>//Button[@AutomationId = 'clearButton'] </b>となる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/c68ef020-f7f1-8c9b-e64b-26105a31fb02.png)


# テスト対象

windows標準でついてる電卓
単純に電卓をたたいて演算する処理を自動化する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/0757d4e8-3014-c484-00bb-82cb7b1cff31.png)




# テストコード実装

スクリプトを記述するに用いるキーワードはこちらになります。

https://gdatasoftwareag.github.io/robotframework-flaui/keywords/3.5.0.html

```
*** Settings ***
Library  FlaUILibrary
Library  BuiltIn

*** Variables ***
${APP}  C:\\Windows\\System32\\calc.exe
${pid}  0

*** Keywords ***
Open APP
	${_pid} =  Launch Application  ${APP}
	Sleep  1
	Set Global Variable  ${pid}  ${_pid}

Close APP
	Log to Console  close ${pid}
	Close Application  ${pid}


*** Test Cases ***
Setup
	Open APP

Calculation
	Click  /Window[@Name='電卓']//Button[@AutomationId='clearButton']
	Click  /Window[@Name='電卓']//Button[@AutomationId='num3Button']
	Click  /Window[@Name='電卓']//Button[@AutomationId='plusButton']
	Click  /Window[@Name='電卓']//Button[@AutomationId='num9Button']
	Click  /Window[@Name='電卓']//Button[@AutomationId='equalButton']
	Take Screenshot

Teardown
	Close APP
```



# 実行

```
robot  xxx.robot    <- 実行するrobotのファイル名
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/8faf8d1c-bbd0-1a4b-3a63-37646df56e41.png)


# 実行結果

電卓の結果12になることのエビデンスを残して、レポートが作成されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/a484577e-656e-cb2f-474f-2e28bf7ca72e.png)