[T-DASH] Android モバイルアプリケーションをテスト自動化してみる

# はじめに

T-DASHでは、ここ最近、Android モバイルアプリケーションの対応をした。

https://service.valtes.co.jp/t-dash/news/20241116

ただ、まだベータ版らしいので、簡単にすぐには使えない。
そこで、必要な準備からテスト実行までを書き下ろしてみた。

サンプルアプリを使って、簡単テスト自動化スクリプトを作成・実行できるまでのフローをまとめてますので、T-DASHを使ってるユーザーで、Androidモバイルアプリケーションの自動化を試してみたい人に役立ててればと思います。


https://service.valtes.co.jp/t-dash/

# 環境

- windows10 PC
- Android vertual or 実機
- T-DASH version 4.5.000

※同様なセットアップすればMacでも動くと思います


# 事前準備

2024/12/01現在、T-DASHのAndroid モバイルアプリケーションはベータ版対応である。

そのため、T-DASH以外にもいくつかのアプリケーションを手動でインストールする必要がある

https://service.valtes.co.jp/t-dash/function/tutorial/mobileapp_beta_vol_002

## Node.js

appiumのinstallや実行につかうツール。

https://nodejs.org/en/

基本的に最新版をダウンロードし、デフォルトの設定でインストーラーを進めれば、使えるようになる。

最後に動作確認をコマンドプロンプトで行う

```
node -v
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/c6a6da01-da44-46f7-f70b-631cc4ab4926.png)

## Java Development Kit (JDK)

Androidの機能を有効にするために、JDKが必要になる。


https://www.oracle.com/java/technologies/downloads/?er=221886

JDKのサイトより、JDK Development Kit windows版のinstaller最新版をダウンロードする
デフォルトの設定でインストーラーを進めれば、使えるようになる。

### 環境変数設定

使うにあたって、環境変数の設定が必要となる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/2c826a0d-53e6-7c5d-170b-e3efa2ce0b63.png)

「システム環境変数の編集」を起動し、「環境変数」を選び、追加・編集を行う。

追加する環境変数

| 変数名| 意味 | 例 |
|:-----------|:------------|:------------|
| JAVA_HOME | Java install先 | C:\Program Files\Java\jdk-21|


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/b34acaa8-dc3c-435d-97d1-04bd6fbffffe.png)

編集・追加する環境変数

| 変数名| 意味 | 例 |
|:-----------|:------------|:------------|
| Path | 実行パス | %JAVA_HOME%\bin |


最後に動作確認をコマンドプロンプトで行う

```
java -version
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/d07c965e-1abf-0df4-c857-f1c803a93b1d.png)


## Android Studio

Androidのアプリケーション操作などを行うために使う。

https://developer.android.com/studio/?hl=ja

Android Studioのサイトより、最新版をダウンロードする
デフォルトの設定でインストーラーを進めれば、使えるようになる。

### パスの取得・設定　（インストール後）

インストールが終わり、Android Studioを起動する。
最初、Android開発のwizardが出てきますが、そのままNextを押し続けて、Studioを起動する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/67ce941b-5033-1c42-c9a5-67c56ae45d20.png)


起動後、左上のハンバーガーメニューをクリックすると、ヘッダーメニューが開きます。
そこから、File → Settings を選ぶ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/b9d0f729-1050-92c0-7355-e46650fbc9ec.png)メモります

Settingsのモーダルが立ち上がります。
左のメニューから、 Languages&Frameworks -> Android SDK を選ぶと、Android SDK Locationの情報が表示されます。
そのパスを


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/8b7b8a92-e39c-46ba-4251-6954702a55af.png)

### 環境変数設定

先ほどと同様に、環境変数設定を行います

追加する環境変数

| 変数名| 意味 | 例 |
|:-----------|:------------|:------------|
| ANDROID_HOME | Android SDK Location | C:\Users\xxx.xxx\AppData\Local\Android\Sdk|

編集・追加する環境変数

| 変数名| 意味 | 例 |
|:-----------|:------------|:------------|
| Path | 実行パス | %ANDROID_HOME%\platform-tools |
| Path | 実行パス | %ANDROID_HOME%\emulator |


環境変数設定後に、コマンドプロンプトを起動し、以下２つのコマンドを実行し、動くことを確認する

```
adb
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/83bd92fc-0c26-2923-be98-8ff3ea6c4323.png)


```
emulator
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/6ac6b1c6-e163-2a63-f2c0-cfc92dd6d093.png)

## appium

モバイルを操作するツールになります

npmコマンド(node.jsをインストールすると、使えるようになる)を用いてインストールする

```
npm install -g appium
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/83c7cc68-bf68-1707-7d88-9d0d6c0890fe.png)

最後に、コマンドプロンプトで以下コマンドを実行し、確認します

```
appium -v
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/8604d3bc-7dbb-8a4b-1edf-6dc36c2a9bd6.png)



### driver install

Android を操作するためのdriverをinstallします

https://appium.io/docs/en/2.0/quickstart/uiauto2-driver/

```
appium driver install uiautomator2
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/1819d2b6-ad51-87d5-b326-59eae2cb828a.png)

### appium 起動

appiumを常駐させます

コマンドプロンプトで以下コマンドを実行します

```
appium --allow-insecure chromedriver_autodownload
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/5c6b7772-2bb4-c6aa-959c-6d5e660f9c0c.png)


## Appium Inspector

モバイルアプリケーションのlocatorを取得するツールになります
今回、T-DASH ベータ版では、Locatorを取得する機能が付随されてなく、Appium Inspectorを使用する。


https://github.com/appium/appium-inspector/releases

ここから最新のversion 「Appium-Inspector-YYYY.MM.DD-win-x64.exe」をダウントードして、インストールする。

appium inspectorを実行すると、以下のアプリケーションが立ち上がる。（動作確認後、閉じてよいです）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/f603613c-fed7-29f4-c7c9-73a8641e9c1f.png)

# テストデバイスとアプリ

Android Studioのvertual 端末、もしくは実機どちらでも使うことができる。

## 実機を使う場合

以下記事を参考に、端末の設定で、「開発者向けオプション」→「USBデバッグ」を有効にする

https://qiita.com/emurin/items/fe640327f847c474f1e8#android-device%E3%81%AE%E8%A8%AD%E5%AE%9A

## Vertual端末

Android StudioのメニューからTools → Device Manager を選ぶ
Device Managerのメニューより「Add a new device　→　Create Virtual Device」を選ぶ

そこから、任意の端末を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/c09d70f1-db1e-2ef3-36d3-79afa26c33bf.png)

※Resolutionが高い端末を選ぶと、メモリ不足により不安定になります


### コマンドプロンプトで起動

Android StudioのDevice Managerから起動することができます。
その場合、メモリを多く消費します。
そのため、Android Studioなしで仮想端末を立ち上げることをおすすめします。

まず、仮想端末のリスを表示する

```
emulator -list-avds
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/99acfe62-dcae-7168-2b24-2e5e966cb3a0.png)

このように、登録した仮想端末の一覧（Pixel6, Pixel_7_API_35）が表示される

次に、実際に起動するとき一覧のデバイス名を用いて、以下コマンドを実施する

```
emulator -avd  ${端末名}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/a32553bb-97af-56db-8040-4b8abd0e4669.png)

このように、仮想端末のみ立ち上がる。

## Android端末の認識

adbコマンドを使って、Androidの操作、操作できる端末をリストアップする
コマンドプロンプトで以下コマンドを実行する

```
adb devices
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/50206dee-7e3d-1c22-e16f-2cdb1fff40ff.png)

このように、端末のUDIDとステータスが表示される。
この例では現在２台のAndroid(仮想端末)が接続されています
device : 利用可能
offline : 利用不可能

状態はこの通りです。

deviceの状態になるように、再接続などを行う必要がある。
実機の場合、先ほどの記事に記載した通り、接続許可設定を行うと、deviceの状態になります。

尚、デバイスを特定する必要があるため、UDIDの情報（ex emulator-5554）をメモっておく必要がある




## テスト自動化練習用デモアプリインストール

以下に、テスト自動化の練習用Androidデモアプリがある
こちらのapkファイルをダウンロードする

https://github.com/valtes-rd/t-dash/releases/tag/AndroidDemo

コマンドプロンプトで以下コマンドを実行して、apkファイルをUDIDで指定した端末にアンドロイドアプリケーションをインストールする

```
adb -s ${端末UDID} install ${apkファイル}
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/c1dac839-672f-569d-c49f-129c7b6a4c2d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/600450be-a50b-1e9b-d5ab-7b4d5020ec88.png)


# T-DASH

T-DASHを起動します

## 今回作るテスト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/dd287ba0-a7b1-00c7-ea4b-0d1d6a633f68.png)


## プロジェクト作成

Dashboardにて、「プロジェクト作成」をクリックし、以下設定を行う

| 項目 | 内容 | 詳細 |
|:-----------|:------------|:------------|
| プロジェクト種類       | Androidアプリ[Beta版]        |          |
| キー      | AndroidDemo        |任意の文字列でOK|
| プロジェクト名      | AndroidDemo        |任意の文字列でOK|
| 対象アプリ名      | AndroidDemo        |任意の文字列でOK|
| アプリ種別     | インストール済みアプリ        |すでにインストールされているものを起動する方法|
| appPackage      | com.valtes.demo.login        |起動するアプリのパッケージ名|
| appActivity      | .MainActivity        |起動したアプリの開くページ|


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/d33de4de-87ad-7e6a-4518-8e8602510e41.png)



## Appium Inspectorによる画面定義

T-DASHで「画面定義」を開く。
画面「Login」を作成し、最後に「端末を選択し画面要素を取得」をクリックする

事前準備がすべて正しく終わっていれば、以下のように「端末接続情報をコピーしてAppium Inspectorを起動」がクリッカブルになる。
複数端末を接続している場合、端末情報が複数リストされるため、使う端末を選ぶ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/3e37e288-b7df-bda2-1fb1-2a3d057f6bda.png)


「端末接続情報をコピーしてAppium Inspectorを起動」をクリックすると、appium inspectorが自動で起動される
起動後、右下のJSON Representationのエリアに、クリップボードに保存されている情報を貼り付けて保存すると、
以下のようにCapability Builderに情報が展開されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/b35f1bd3-57ce-1194-52d6-02bfab9ca068.png)

最後に、右下の「Start Session」をクリックする
すると、Android端末（仮想端末）に対象のアプリが起動し、Inspectorでは、端末と同じ情報が表示される。
Inspectorの中の要素をクリックすると（グリーンでハイライトされる）、Selected Elementにlocator情報(xpath)が表示される、
このxpathが画面要素の値(xpath）になります。

また、Androidを操作をし、appium inspectorと画面が同期していない場合、リフレッシュボタンをクリックすると、同期されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/f770cdfa-81df-9647-53cb-a2d89835d6df.png)

最低限の画面定義は以下の通りです

| 要素名 | 値 | 
|:-----------|:------------|
|ハンバーガーメニュー|//android.widget.ImageView[@content-desc="その他のオプション"]|
|Login|//android.widget.TextView[@resource-id="com.valtes.demo.login:id/title" and @text="Login"]|
|メールアドレス|//android.widget.EditText[@resource-id="com.valtes.demo.login:id/etEmail"]|
|パスワード|//android.widget.EditText[@resource-id="com.valtes.demo.login:id/etPassword"]|
|ログイン|//android.widget.Button[@resource-id="com.valtes.demo.login:id/btLogin"]|
|名前|//android.widget.TextView[@resource-id="com.valtes.demo.login:id/tvName"]|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/eb0eb22c-b58b-2228-3052-2a9538c1ae8f.png)

## テストケース作成

テストスイート、テストケースを作成し、テストケースをクリックする

以下、動作、画面、設定を行う

| 動作 | 画面名（設定値１） | 要素名（設定値２） | 設定値（設定値３） | 
|:-----------|:------------|:------------|:------------|
|アプリケーションを起動する | | | |
|アプリケーション要素をタップする |Login |ハンバーガーメニュー | |
|アプリケーション要素をタップする |Login |Login | |
|アプリケーション要素のテキストをクリアし、テキストを入力する |Login |メールアドレス |alice@example.com |
|アプリケーション要素のテキストをクリアし、テキストを入力する |Login |パスワード |password |
|アプリケーション要素をタップする |Login |ログイン | |
|アプリケーションに要素が表示されるまで待つ |Login |名前 |10 |
|アプリケーション要素のテキストが一致するか検証する |Login | 名前|山田アリス |
|端末のスクリーンショットを保存する | | | |
|アプリケーションを終了する | | | |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/4e2354cf-55a8-6cec-f146-c13f68a2ded0.png)


## テスト実行

「端末を選択してテスト実行する」をクリックする

すると、「端末を選択し画面要素を取得」をクリックしたときと同様の、以下のような画面が立ち上がる。
端末を選択し、「テストを実行する」をクリックする。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/44d6b5ed-5815-a281-5772-7295ea092f10.png)

実行が正しく終われば、以下のようにテスト結果を得ることができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/2a12585d-8e6b-60ad-d54e-d47fada136ee.png)


# さいごに

現在のT-DASH version 4.5ではAndroidモバイルアプリケーションはbeta版です。
そのため、以下の課題を含んでいる

- 構築に時間がかかる
- 画面要素の取得が別ツールを使うため、多少不便

この課題を早く解決してくれると、もっと使いやすくなると思います！