自動テストを簡単にするためのアプリ実装の工夫

Magic Podの使い方 > 自動テストを簡単にするためのアプリ実装の工夫

ユニークID

テスト対象アプリがバージョンアップしてもテストが安定して動作するためには、次の2点が非常に重要です。

  • アプリ開発時に、各UI要素にユニークID(画面内の他の全ての要素と値が異なる、一意なID)を付与しておくこと。
  • アプリの画面を修正した場合も、上記のユニークIDは変更しないこと。

Magic Podは、内部的にアプリのシステム情報を利用して操作対象のUI要素を特定するため、要素を特定しやすいユニークIDがなかったり、変更されてしまったりすると、テスト失敗の原因となります。ユニークIDを各UI要素に付与し、変更しないようにすることで、安定したテスト運用が可能になります。

具体的なIDの割り当て方は以下の通りです。開発チームにID割り当てを依頼する場合は、こちらの手順を伝えてみてください。

iOS

Xcode右側ペインのIdentity Inspector > Accessibilityの項目にて、図1のように各UI要素にIdentifierを指定してください。このプロパティはaccessibilityIdentifierというUI自動操作のためのプロパティで、通常のアプリ利用者からは見えません。

XcodeからaccessibilityIdentifierを指定

図1 XcodeからaccessibilityIdentifierを指定

なお、リストの行のようにアプリの実行時に動的に生成される要素については、上記のようにIdentity Inspectorは使えません。そのような場合は、図2のようにプログラム中でaccessibilityIdentifierプロパティをセットしてください。

Android

Android Studioの右側ペインのAttributes > IDの項目にて、図3のように各UI要素にIDを指定してください。この属性は、リソースIDというプログラム上で要素を一意に識別するための属性です。

図3 Android StudioからリソースIDを指定

Androidの場合、リスト行のような動的生成される要素にリソースIDを振るのは、様々な制約があり大変です1。こういった動的生成される要素に対しては、contentDescription属性を指定することを検討してください。(text属性を持つ要素については、そちらでも可。)

動的生成される要素に対しては、図4のようにプログラム中でsetContentDescriptionメソッドを使ってcontentDescription属性をセットできます。

contentDescription属性は視力が不自由な人のための音声読み上げ機能などが使用する情報ですが、この情報があるとMagic Pod側でUI要素の特定が容易になります。(ただしcontentDescription属性やtext属性はアプリの画面変更の際に変更されることもあるので、リソースIDと比べ画面変更の影響は受けやすいです。)

WebView

AndroidのWebView内の要素をMagic Podから操作する場合、こちらこちらの記事を参考にアプリ内で setWebContentsDebuggingEnabled(true) を呼び出しておく必要があります。(ただし、この処理を行うことでWebView内のHTMLが外部のデバッグツールから参照可能になります。これが問題になる場合は、リリース版のアプリでは setWebContentsDebuggingEnabled(true) を呼びださないようにしてください。)

 

  1. 詳しくはHow to set Id of dynamic created layout?を参照してください。
    []