目次
1.ユニークID
テスト対象アプリがバージョンアップしてもテストが安定して動作するためには、次の2点が非常に重要です。
- アプリ開発時に、各UI要素にユニークID(画面内の他の全ての要素と値が異なる、一意なID)を付与しておくこと。
- アプリの画面を修正した場合も、上記のユニークIDは変更しないこと。
MagicPodは、内部的にアプリのシステム情報を利用して操作対象のUI要素を特定するため、要素を特定しやすいユニークIDがなかったり、変更されてしまったりすると、テスト失敗の原因となります。ユニークIDを各UI要素に付与し、変更しないようにすることで、安定したテスト運用が可能になります。
具体的なIDの割り当て方は以下の通りです。開発チームにID割り当てを依頼する場合は、こちらの手順を伝えてみてください。
・iOS
Xcode右側ペインのIdentity Inspector > Accessibilityの項目にて、図1のように各UI要素にIdentifierを指定してください。このプロパティはaccessibilityIdentifierというUI自動操作のためのプロパティで、通常のアプリ利用者からは見えません。
なお、リストの行のようにアプリの実行時に動的に生成される要素については、上記のようにIdentity Inspectorは使えません。そのような場合は、図2のようにプログラム中でaccessibilityIdentifierプロパティをセットしてください。
tableViewCell2.accessibilityIdentifier = "toDoListLine2"
・Android
Android StudioでリソースIDをセットする
Android Studioの右側ペインのAttributes > IDの項目にて、図3のように各UI要素にIDを指定してください。この属性は、リソースIDというプログラム上で要素を一意に識別するための属性です。
プログラム中でcontentDescription属性をセットする
Androidの場合、リスト行のような動的生成される要素にリソースIDを振るのは、様々な制約があり大変です (詳しくはHow to set Id of dynamic created layout?を参照してください)。こういった動的生成される要素に対しては、contentDescription属性を指定することを検討してください(text属性を持つ要素については、そちらでも可)。
動的生成される要素に対しては、図4のようにプログラム中でsetContentDescriptionメソッドを使ってcontentDescription属性をセットできます。
view.setContentDescription("toDoListLine2");
図4 contentDescriptionをセットするJavaコード
contentDescription属性は視力が不自由な人のための音声読み上げ機能などが使用する情報ですが、この情報があるとMagicPod側でUI要素の特定が容易になります。(ただしcontentDescription属性やtext属性はアプリの画面変更の際に変更されることもあるので、リソースIDと比べ画面変更の影響は受けやすいです。)
- testTagsAsResourceId = trueを、testTagを利用したいツリーの最上部で宣言してください。この設定によって、指定したIDを自動化エンジン側から認識可能になります。
- testTag修飾子に、以下の形式で文字列を設定してください。
-
<<パッケージ名>>:id/<<任意の文字列>>
-
・ブラウザ
Webアプリケーションの場合は、単純にHTMLタグのid属性を付与するだけでユニークIDとして認識させることができます。また、アプリケーションのフレームワークの都合上固定のidを付与しづらい場合には、代わりにdata-testid属性を付与することをおすすめしています。data-testid属性はReactなどで実装されたアプリケーションでテスト対象を示すための属性として一般的に使われているため、MagicPodでもユニークIDとして扱います。
<div id="user-name">XXX</div>
<div data-testid="user-name">XXX</div>
2.WebView
「WebViewをスキャン」オプションを使用すると、WebViewに対するテストスクリプトのメンテナンス性を向上させることができます。詳細はWebViewのテストを参考にしてください。
また、こちらを参考にdata-testid属性を付与してください。