💯

MagicPodで指定位置タップの座標指定を効率的に設定する

2024/12/06に公開

こんにちは。dely株式会社のiOSエンジニア、uetyoです。

この記事は「ソフトウェアテストの小ネタ Advent Calendar 2024」の6日目の記事です。
AIテスト自動化プラットフォーム『MagicPod』でテストケースを作成する際に「指定位置タップ」の「座標指定」を効率的に設定する方法を見つけたので紹介します 📮

MagicPodとは

MagicPod は、iOSやAndroid、Webアプリを対象に実際にアプリを操作しながら事前に想定した挙動と一致するかを検証するためのE2Eテストツールです。基本的なタップやスワイプに加えて、テキストの入力、表示されている値が想定した値と一致するかなど一通りの動作を再現することができます。

クラシルリワードでは、iOS・Android・Webの3つのプラットフォームでサービスを提供しています。特にiOSアプリに関しては週に3回を超える頻度でリリースを行っているため、MagicPodを導入することでリリース前のテスト工数を大幅に削減することができました。

詳細な導入経緯については以下の記事にて紹介しています。
クラシルリワードにおける自動テストツール MagicPodの導入事例

指定位置タップ機能の利用経緯

クラシルリワードでは、広告表示に AppLovin の Max という外部サービス・SDKを利用しています。

クラシルリワードにおける基礎体験として「ユーザが広告を閲覧できること」「閲覧したあと意図した挙動をすること」は非常に重要であり、人力では途方もない時間が掛かるためMagicPodで担保したい項目の一つでした。

広告の再生処理フローは「完了待機」「スキップ」「完了」の3つのステップで行います。テストケースを作成してしばらくは安定して完了する状態でしたが、ある時から急に失敗するようになってしまいました。

調査したところ、SDKの広告配信内容に変更があり、表示しているスキップボタンの位置を取得できなくなったようです(MagicPodでは ViewIdentifier と ViewHierarchy を取得することで要素の位置を確定している)。

この問題の解決に向けて、できれば利用したくなかったのですが「指定位置タップ機能」を利用することにしました(詳細は後述)。

指定位置タップ機能とは

指定位置タップ機能は、MagicPodのテストケース作成画面で指定したエリア(もくしは座標)にタップを行う機能です。

現時点では以下のエリアをざっくりと指定することができます(目安です、詳細は実際に設定してみてください 🙏)

中でも「座標指定」は、指定した座標にタップを行うことができるため、非常に強力です。しかし設定も非常に難しく「どこを起点としてX%なのか」「実際にどこをタップするのか分からない」という問題がありました。

指定位置タップ機能の効率的な設定方法

ここからは実際にMagicPodを操作して設定しています。

まずはじめに、MagicPod内で一次的に利用するテストケースを作成し、対象の画面全体をタップエリアに設定します。
検証したところ、 xpath=(//XCUIElementTypeApplication)[1] を指定すればアプリ全体をタップ対象とすることができるようです。

次に、シミュレーターでSafariを起動し、ウェブ検索で画面のタップ位置を可視化するウェブサービスを開きます。(今回は「ちょっとしたスマホ(タッチパネル)チェック・テスト」というサービスの「お絵描き感覚フリーテスト」を利用しています。)

今回はスキップボタンの「>>」をタップできる位置が見つかるまでひたすらタップして検証し、目的の座標を特定しました。

最終的なワークフローは以下の通りです。

まとめ

  • テスト成功率
    • 改善前:40%
    • 改善後:99%
  • MagicPod は強力なE2Eテストツール
  • 画面レイアウトが取得できない場合は「指定位置タップ機能(座標)」が利用できる
  • 座標設定は難しいが、効率的な設定方法を見つけた
  • MagicPod のGUIが簡単になることを祈ります 🙏
dely Tech Blog

Discussion