このページでは、テスト対象の要素を指定する「ロケータ」をユーザーが追加する方法を説明します。なおこのページは、AppiumやSeleniumのロケータの仕組みをある程度理解している上級者向けのガイドです。
1.ロケータを追加する
あるUI要素にロケータを追加したい場合は、キャプチャしたUI上で要素をクリックし、表示されたポップアップで「+」ボタンを選択します。

あとはこの画面上で、適切なロケータのキーと値を指定して「OK」ボタンを押せば、ロケータが追加されます。

2.変数を使ったロケータ
似たようなUI要素が多数ある場合、
- たくさんのキャプチャを撮るのが大変
- 自動生成されたUI要素が使いにくい場合、1つ1つに同じ修正をかけるのに手間がかかる
といった問題があります。これを変数を使って解決することができます。
2-1.変数つきのロケータを作成する
例としてAndroidのApiDemosアプリを使って解説します。このアプリはその名の通りAndroidの各種機能を一覧できるもので、非常に多くのメニューが階層化されていますがほとんどのロケータは同じ構造を持っています。
まずは変数つきのロケータとして使い回すUI要素を決めます。メニューやリンクなど、文字列を使って一致させるタイプのものが向いています。ここでは一番上にある「Accessibility」を選びます。Xpathを見ると、「Accessibility」という文字列をキーにして要素を特定していることが分かります。

図1 メニュー項目のロケータ
ロケータを追加して変数つきのものを作ります。ロケータの横にある+ボタンをクリックすると、ロケータを追加するための入力フィールドが表示されます。

既存のロケータを見ながら入力します。種類は既存と同じ「xpath」、値は「Accessibility」以外の部分をそのまま書き写します。「Accessibility」となっていた箇所は「${1}」と書き換えます。このように数字の1から始まる変数名をつけておくと、MagicPodの内部でロケータの変数として扱われ、通常の変数とは違う動作になります。入力を終えたら「OK」をクリックして保存します。

図3 ロケータの保存
すると、先ほど作成したロケータが自動で選択されます。

図4 自動でロケータが変更
わかりやすいように要素の名前も変えておきます。

図5 要素名の変更
2-2.変数つきのロケータを使う
今度はテストケースの中でこのロケータを使ってみます。先程作った「メニュー」という要素をテストケース上にドラッグ&ドロップすると、値入力欄が表示されます。ここに入力した値が先程の「${1}」の部分に代入されます。

図のように実際のメニューの文字列を入力します。

図7 変数の値を入力

テストを実行してみると、意図通り「Accessibility」と「Custom View」が順にタップされているのが分かります。

アプリケーションの構成やテストシナリオによって、この変数つきロケータを使う方法と通常通りすべての画面をキャプチャする方法の良し悪しは変わります。目的に合わせて使い分けてみてください。
3.MagicPod独自のロケータキー
ロケータのキーは、ブラウザテストの場合はSeleniumでサポートされているものが、モバイルアプリテストの場合はAppiumでサポートされているものが利用可能です。それに加え、MagicPod独自のロケータキーがいくつかあります。
- ai: MagicPodが計算する、要素の日本語名を使って要素を検索します。日本語名の計算にはSelenium/Appiumの要素ツリー情報に加え、ページ画像に対するOCR(光学文字認識)やディープラーニングアイコン画像認識の結果も利用します。ただしOCRや画像認識は端末によっては失敗することもあり、他のロケータと比べると非常に不安定です。そのため、他に方法がない場合や特定の端末でしかテストしない場合以外では利用しない方がよいです。
- (UIツリーから検索): iOSネイティブアプリの要素の場合、通常のAppiumロケータに加え(UIツリーから検索)と注意書きのついたロケータを指定することができます。このロケータを指定すると、画面全体のUIツリーを取得し、そのツリーをもとに要素の位置を特定して画面操作を行います。iOSネイティブアプリでは、iOSフレームワークの不具合により本来見つかるはずの要素が見つからないことが稀にありますが、その場合に(UIツリーから検索)のロケータを使うと不具合を回避できることがあります。通常のAppiumロケータと比べ低速・不安定になることも多いので、MagicPodのサポートから勧められた場合以外は利用しない方がよいです。
- shadow: Shadow DOM内の要素に対するテストが可能になります。詳しい使い方はshadowロケータを利用して、Shadow DOM内の要素に対してテストを実施するをご覧ください。
セル数が多いテーブルなどでこの問題が起きるケースがあります。