独自のロケータを定義する

Magic Podの使い方 > 独自のロケータを定義する

このページでは、テスト対象の要素を指定する「ロケータ」をユーザーが定義する方法を説明します。なおこのページは、AppiumやSeleniumのロケータの仕組みをある程度理解している上級者向けのガイドです。

ロケータを定義する

あるUI要素にロケータを追加したい場合は、キャプチャしたUI上で要素をクリックし、表示されたポップアップで「+」ボタンを選択します。

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

変数を使ったロケータ

似たようなUI要素が多数ある場合、

  • たくさんのキャプチャを撮るのが大変
  • 自動生成されたUI要素が使いにくい場合、1つ1つに同じ修正をかけるのに手間がかかる

といった問題があります。これを変数を使って解決することができます。

変数つきのロケータを作成する

例としてAndroidのApiDemosアプリを使って解説します。このアプリはその名の通りAndroidの各種機能を一覧できるもので、非常に多くのメニューが階層化されていますがほとんどのロケータは同じ構造を持っています。

まずは変数つきのロケータとして使い回すUI要素を決めます。メニューやリンクなど、文字列を使って一致させるタイプのものが向いています。ここでは一番上にある「Accessibility」を選びます。Xpathを見ると、「Accessibility」という文字列をキーにして要素を特定していることが分かります。

図1 メニュー項目のロケータ

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

図2 ロケータの追加入力フィールド

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

図3 ロケータの保存

作成しただけではまだ以前のロケータが使われているので、最後にドロップダウンから今作ったロケータを選択しておきます。

図4 保存したロケータの選択

わかりやすいように要素の名前も変えておきます。

図5 要素名の変更

 
これでロケータの作成は完了です。このように変数を入れてしまうと、元々の「Accessibility」という要素をそのまま指し示すことはできないので注意してください。

変数つきのロケータを使う

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

 

図6 入力欄を含むUI要素

図7のように実際のメニューの文字列を入力します。「Custom View」メニューは「Accessibility」メニューをタップした後の画面に存在しますが、今回その画面のスクリーンショットは撮っていません。

図7 変数の値を入力

 

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

図8 テスト実行結果

アプリケーションの構成やテストシナリオによって、この変数つきロケータを使う方法と通常通りすべての画面をキャプチャする方法の良し悪しは変わります。目的に合わせて使い分けてみてください。

Magic Pod独自のロケータキー

ロケータのキーは、ブラウザテストの場合はSeleniumでサポートされているものが、モバイルアプリテストの場合はAppiumでサポートされているものが利用可能です。それに加え、Magic Pod独自のロケータキーがいくつかあります。

  • ai: Magic Podが計算する、要素の日本語名を使って要素を検索します。日本語名の計算にはSelenium/Appiumの要素ツリー情報に加え、ページ画像に対するOCR(光学文字認識)やディープラーニングアイコン画像認識の結果も利用します。ただしOCRや画像認識は端末によっては失敗することもあり、他のロケータと比べると非常に不安定です。そのため、他に方法がない場合や特定の端末でしかテストしない場合以外では利用しない方がよいです。
  • (UIツリーから検索): iOSネイティブアプリの要素の場合、通常のAppiumロケータに加え(UIツリーから検索)と注意書きのついたロケータを指定することができます。このロケータを指定すると、画面全体のUIツリーを取得し、そのツリーをもとに要素の位置を特定して画面操作を行います。iOSネイティブアプリでは、iOSフレームワークの不具合により本来見つかるはずの要素が見つからないことが稀にありますが1 、その場合に(UIツリーから検索)のロケータを使うと不具合を回避できることがあります。通常のAppiumロケータと比べ低速・不安定になることも多いので、Magic Podのサポートから勧められた場合以外は利用しない方がよいです。
  1. セル数が多いテーブルなどでこの問題が起きるケースがあります。 []