Magic Podモバイルアプリテスト実装の逆引き

## はじめに

MagicPodを使うユーザが**モバイルアプリテスト**を実装する時に、**利用目的から**コマンドや対応する機能を探すためのまとめです。
主に、実装時に自分がよく使う操作や、よく尋ねられる操作を選んでいるので、複雑なテストの実装方法を知りたい方よりも、まだMagicPodでの実装に慣れない方向けです。

機能一覧から探したい場合は、公式ドキュメントの実践ガイドも参考にしてください。

- MagicPod公式：https://www.magic-pod.com/
- MagicPodヘルプセンタ―：https://support.magic-pod.com/hc/ja


（気付いた時に足していきます）

※本記事のMagicPodバージョン0.93.0(2021/12/18)

## 本記事で使う名称

本記事で使用している名称です。この名称を使うとヒットしやすいかもしれません。

|名称|説明|イメージ|
|---|---|:---:|
|UI要素|MagicPodで操作対象とするUIのこと|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/79f6e7c7-4800-96db-f386-a97138fb1f79.png" width="40%">|
|UI一覧|MagicPodで取得した画面キャプチャの一覧|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/7ee7174c-a46c-cb73-77ac-03edd710d8a4.png" width="70%">|
|システムボタン|端末側の物理ボタン|ホームボタン等|
|ナビゲーションバー|Android端末の操作を行うためのバー|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/70dcf06b-d498-e71c-337e-9e7edc5ee44a.png" width="40%">|
|スイッチ|ON/OFFなどを選択するためのUI|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/e084c2a1-4eee-8af3-09bd-de35d3a4312e.png" width="20%">
|ピッカー|日時などを選択するためのホイール上のUI|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/e549e2e2-c126-802b-c21e-213e2e2df140.png" width="60%">|


## 端末を操作する

### システムボタン/ナビゲーションバー

- iOS/Androidの「ホーム」ボタンを押す、ホーム画面を表示する

```
    - コマンド：「画面操作」＞「システムボタンを押す」
    - システムボタン種別：「ホーム」
```

- Androidの「戻る」ボタンを押す、前の画面を表示する

```
    - コマンド：「画面操作」＞「システムボタンを押す」
    - システムボタン種別：「戻る」
```

▼画面キャプチャ上に見えていてもうまく押せない場合が多いため、コマンドを利用します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/2d0afdd9-4972-a010-302c-65a4dabcede9.png" width="20%">

- Androidの「メニュー」ボタンを押す、「アプリ一覧」ボタンを押す

```
    - コマンド：「画面操作」＞「システムボタンを押す」
    - システムボタン種別：「メニュー」、「アプリ一覧」
```

- 音量ボタンを操作
    - 対応するコマンドはありません。

### タップ

- タップがうまくいかない時のタップ
    - タップ操作は行われていても、UI要素をうまくタップできていない場合があります。※エラーが出ない。

```
    - コマンド：「画面操作」＞「指定位置タップ」
    - 画面要素：タップしたいUI要素
    - 位置：「中央」を指定することで、うまくいく場合があります。
```

- 座標を指定してタップ
    - ~~対応するコマンドはありません。~~[バージョン0.69.0(2020/12/26)で機能追加](https://github.com/Magic-Pod/japanese-issue-and-doc/issues/195)

```
    - コマンド：「画面操作」＞「指定位置タップ」＞「座標」
    - 画面要素：タップしたいUI要素
    - X座標、Y座標：UI要素のタップ位置をパーセントで指定。UI要素の範囲外を指定することも可能
        - (X, Y) = (95, 50)の時、要素の右端(要素の範囲内)をタップ
        - (X, Y) = (120, 50)の時、要素の右端から、要素の幅20%分を越えた位置をタップ
```


### フリック

- 指定した要素に対してフリック操作
    - リストの１要素を削除する際に左フリックで「削除」ボタンを出現させる場合や、<br>リストの１要素に対して特殊な操作をする場合などに使用します。

```
    - コマンド：「画面操作」＞「フリック」
    - 画面要素：フリック対象
    - 移動方向、移動量：フリックの向きと、画面の高さまたは幅に対する割合
```

▼テスト1を画面要素として、左方向にフリックした場合の操作イメージ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/87413d2c-2c9c-666f-cdef-982a42ba415f.png" width="30%">


### スワイプ/画面スクロール

- 相対位置、相対量を使ってスワイプ

```
    - コマンド：「画面操作」＞「スワイプ」
    - X座標、Y座標：スワイプの開始位置を画面の幅に対する割合
    - 移動量：スワイプの角度と画面の高さまたは幅に対する割合
    - 移動方向、圧力：スワイプの向きと、指で押す強さ
```

▼「スワイプ」コマンドの値設定
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/7a021886-c1a3-668c-d52d-7decb0500624.png" width="50%">

- 絶対位置、絶対量を使ってスワイプ
    - 対応するコマンドはありません。

- 特定のUI要素が表示されるまでスワイプ
    - あらかじめ、表示したいUI要素を含む画面キャプチャを取得しておきます。

```
    - コマンド：「画面操作」＞「スワイプ」
    - 画面要素：表示したいUI要素
    - 移動方向：スワイプの方向。下から上にスワイプしたい時は「上方向」
    - 最大回数：スワイプを実施する最大回数
```

▼移動方向「上方向」の操作イメージ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/322c1703-40ce-8ae3-5f97-61c4706ba864.png" width="70%">

▼移動量が足りず、UI要素が見つからなかった場合のエラー例。「最大回数」を増やすことで解消される場合があります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/cfeb4116-c783-75bc-b215-bcc23d7b2988.png" width="90%">

- 画面外にあるUI要素をタップしたい
    - あらかじめ、タップしたいUI要素を含む画面キャプチャを取得しておきます。

```
    - コマンド①、②を使って、画面をスワイプさせた後にタップします。
    - コマンド①：「画面操作」＞「スワイプ」
    - コマンド②：「画面操作」＞「タップ」
```

▼実装例：画面下側にある「素泊まりプラン」までスワイプした後に「予約」をタップ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/79dd4261-7454-2a84-43c6-cb36076a3200.png" width="70%">

### 画面キャプチャ

- 画面キャプチャ、スクリーンショットを保存

```
    - コマンド：「システム」＞「画面キャプチャを取得」
    - 画面キャプチャ名：一括実行結果から「すべての画面キャプチャをダウンロード」または「画面キャプチャを取得コマンドの結果をダウンロード」でダウンロードする際のファイル名
```
▼一括実行結果画面
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/f079edea-75ec-db3d-cffc-27ffe4f067bb.png" width="70%">

### ピッカー

- ピッカー値を入力

```
    - コマンド：「画面入力」＞「ピッカー値入力」
    - 文字列：セットしたい値。完全一致で指定
    - 画面要素：操作したいピッカー
    - スワイプ方向：iOSの場合に、スワイプする方向。Androidの場合はスワイプを使わず、値のキー入力によってセットします。
    - 最大回数：iOSの場合に、スワイプを実施する最大回数
```

▼スワイプしても値が見つからなかった場合のエラー例。セットしたい値を見直すか、スワイプ方向や最大回数を修正することで解消される場合があります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/b8434f71-4c77-8ec0-07c7-b532d9dd1e7a.png" width="80%">

### テキスト入力/キー入力

- 入力したテキストを削除したい、削除キーを入力したい

```
    - コマンド：「画面入力」＞「キーボードキー入力」
    - キー種別：「削除」
```

▼キーボード上のキーが画面キャプチャ上に見えていてもうまく押せない場合が多いため、コマンドを利用します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/6dd45438-a096-85ed-9aab-b295a1cd3892.png" width="30%">

- エンターキー、送信キー、完了キーなど、キーボード上のキーを操作したい

```
    - コマンド：「画面入力」＞「キーボードキー入力」
    - キー種別：押されるキーの種類
    - 「エンター」「検索」「送信」「完了」「実行」「次へ」「削除」「0」~「9」をサポートしています。
```

- テキストボックスに入力されているテキストをまとめて削除したい、クリアしたい
    - 対応するコマンドはありません。削除キーで代替します。

### スイッチ

- スイッチをONにしたい、OFFにしたい

```
    - コマンド：「画面入力」＞「スイッチ操作」
    - 画面要素：切り替えたいスイッチ
    - 状態：セットしたい状態(ON/OFF)
```

- スイッチの状態を取得したい、値として変数に保存したい
    - スイッチの状態によって、以下のパターンで「値」を持っています。
        - OFFの場合、「0」
        - ONの場合、「1」
    - 取得したい場合は、「変数」＞「値を保存」

- スイッチの状態をテストしたい

```
    - コマンド：「確認」＞「UI要素の値が一致するか確認(0/1)」
または
    - コマンド：「確認」＞「UI要素が選択されているか確認/選択されていないことを確認」
```

### 端末の位置情報を指定

- 緯度、経度で指定したい
- 地図上から選択したい
- 参考：[位置情報の設定 – Magic Podヘルプセンター](https://support.magic-pod.com/hc/ja/articles/4410659367705)

```
  - 端末接続時の設定＞「詳細」
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/2149e8a5-f1d9-1a3e-1248-5645bf58b602.png" width="70%">



### ブラウザアプリ

- URL指定で遷移
    - 対応するコマンドはありません。
    - コマンド①②を使って代替することができます。

```
    - コマンド①：「画面操作」＞「テキスト入力」で、URL入力欄にURLを入力
    - コマンド②：「画面入力」＞「キーボードキー入力」で、「検索」
```

▼実装例：iOSのSafariでURL指定遷移
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/589f38f2-94c9-5f9b-35da-79eca728ee1d.png" width="70%">


## テストケースを編集する

### コメント挿入

- コメントを挿入、テストケース編集画面を見やすくしたい
    - コメントや空行を使って、ステップの説明やブロック化したいステップとステップの間を空けることができます。

```
    - コマンド：「システム」＞「コメント」
    - コマンド：「システム」＞「空行」
```

## UI一覧編集

### 一括移動/一括削除

1. UI一覧から「UI選択」を押下します
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/41a7a37c-7e12-bdd5-ba20-cb71cf925b8b.png" width="70%">

2. 移動したいUIにチェックを入れ、「移動」ボタンから移動先を選択または「削除」を選択します
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/e0947778-0704-1ab1-1420-357fd42890e3.png" width="90%">

### 表示形式の変更

- 左上の「〇〇形式に変更」から、表示形式を切り替えることができます。
   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/41481671-fc58-a2ee-2447-a891316b2dce.png" width="80%">

## 共有ステップ

### 共有ステップの削除

- 「プロジェクト画面」＞「共有ステップ」から削除できます。
- ~~※付与されている権限によってはできない場合があります。~~([バージョン0.62.0(2020/9/23)」で修正済み](https://github.com/Magic-Pod/japanese-issue-and-doc/blob/master/CHANGELOG.md))

   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/de373f4c-21ca-67fb-2f3b-69d4dd2c2a5c.png" width="90%">


### 共有ステップの複製

~~対応する機能はありません。~~[バージョン0.69.0(2020/12/26)で機能追加](https://github.com/Magic-Pod/japanese-issue-and-doc/issues/251)

- 「プロジェクト画面」＞「共有ステップ」から複製できます。
- 共有ステップ編集画面でステップをコピーし、テストケース編集画面にペーストする方法もあります。

　　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/b5eb2ce3-a4a6-ee9e-e55f-68cc7909ec96.png" width="90%">


### 効率的な編集方法

テストケース編集画面と共有ステップ編集画面の往復を避けるだけの方法です。

- 共有ステップ編集画面とテストケース編集画面を別タブで開きます。
- 共有ステップを編集した後は、テストケース編集画面を更新することで、編集内容が反映されます。


## テスト結果

### 画面キャプチャ/スクリーンショット

- 画面キャプチャ、スクリーンショットをダウンロード
    - プロジェクト画面からテスト一括実行した場合
        - 「テスト一括実行結果 #XX」＞「すべての画面キャプチャをダウンロード」または「画面キャプチャを取得コマンドの結果をダウンロード」
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/f079edea-75ec-db3d-cffc-27ffe4f067bb.png" width="80%">
    - コマンドラインテスト実行の場合
        - [一括テスト実行・コマンドラインテスト実行(モバイルアプリテスト)](https://www.trident-qa.com/magic-pod-batch-test-run/)を参照
    - テストケース編集画面から実行、部分指定実行の場合
        - ダウンロードできません。ブラウザ上で閲覧します。

## その他

- テストケースをバージョン管理する、バックアップする
    - 対応する機能はありません。テストケースの「複製」によって簡単に複製することは可能です。
- 作業中のテストケースや未使用のテストケースを一時的に非表示にしたい
    - 対応する機能はありません。
    - 一括実行の対象外にしたい場合は、テストケースに対して「実装中」「未使用」などのラベルを付けることで、一括実行時に対象外指定しやすくなります。

▼ラベルの付与例
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/4252521a-9109-fce0-2e77-58bff3b0e547.png" width="40%">

▼一括実行設定例
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548627/5d466375-6253-9e7a-d070-df0d2c36f328.png" width="70%">


## 参考

- [MagicPod wiki - コマンド一覧](https://github.com/Magic-Pod/japanese-issue-and-doc/wiki/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%B8%80%E8%A6%A7)
- [Android画面各部の名称](https://qiita.com/SallyCinnamon/items/5a19c723be27b1691352)


## おわりに

MagicPodは直観的に操作できるツールなので、マニュアルなしでも多くの機能を使うことができますが、「〇〇したいけどどのコマンドだろう」という時など、ご参考になれば嬉しいです。