このページでは、テスト対象の要素を指定するロケータをユーザーが追加する方法、追加したロケータを編集する方法を説明します。なおこのページは、AppiumやSeleniumのロケータの仕組みをある程度理解している上級者向けのガイドです。
目次
1.ロケータを追加する
まず、キャプチャしたUI上でUI要素をクリックします。
※要素選択モード中は、マウスオーバーで表示される鉛筆マークをクリックするか、Shiftキーを押しながらクリックします。
そして、表示されたポップアップ上で
既にあるロケータを複製して追加する場合は、ロケータをプルダウンで選択し、コピーボタンをクリックします。
するとxpath
などのキー、(//XCUIElementTypeTextField)[1]
などの値があらかじめ入った状態で編集ができます。編集をして「OK」ボタンをクリックすれば、ロケータが追加されます。
何もない状態でいちから書いて追加する場合は、「+追加」ボタンをクリックします。
すると空の状態で編集ができます。キーと値を入力して「OK」ボタンをクリックすれば、ロケータが追加されます。
2.ロケータを編集する
追加したロケータを編集するには、まず鉛筆マークをクリックします。
すると編集ができる状態になります。編集し「OK」ボタンをクリックすると、編集が完了します。
3.変数を使ったロケータ
似たようなUI要素が多数ある場合、
- たくさんのキャプチャを撮るのが大変
- 自動生成されたUI要素が使いにくい場合、1つ1つに同じ修正をかけるのに手間がかかる
といった問題があります。これを変数を使って解決することができます。
3-1.変数つきのロケータを作成する
例としてAndroidのApiDemosアプリを使って解説します。このアプリはその名の通りAndroidの各種機能を一覧できるもので、非常に多くのメニューが階層化されていますがほとんどのロケータは同じ構造を持っています。
まずは変数つきのロケータとして使い回すUI要素を決めます。メニューやリンクなど、文字列を使って一致させるタイプのものが向いています。ここでは一番上にある「Accessibility」を選びます。ロケータを見ると、「Accessibility」という文字列を基準として要素を特定していることが分かります。
ロケータを追加して新たに変数つきのものを作ります。基準となるロケータをプルダウンから選び、ロケータの横にあるコピーボタンをクリックすると
xpath
などのキー、//android.widget.TextView[@content-desc='Accessibility']
などの値があらかじめ入った状態で編集ができます。
すると、先ほど作成したロケータが自動で選択されます。
わかりやすいように要素の名前も変えておきます。
3-2.変数つきのロケータを使う
今度はテストケースの中でこのロケータを使ってみます。先程作った「メニュー」という要素をステップに追加すると、値入力欄が表示されます。ここに入力した値が先程の「${1}」の部分に代入されます。
図のように実際のメニューの文字列を入力します。
テストを実行してみると、意図通り「Accessibility」と「Custom View」が順にタップされているのが分かります。
アプリケーションの構成やテストシナリオによって、この変数つきロケータを使う方法と通常通りすべての画面をキャプチャする方法の良し悪しは変わります。目的に合わせて使い分けてみてください。
実行ごとにロケータの文字列が変わる場合
4.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内の要素に対してテストを実施するをご覧ください。
セル数が多いテーブルなどでこの問題が起きるケースがあります。
5.ロケータについて学ぶ
このスライドを参考にしてください。