📱

モバイルアプリのテストでMaestroを使ってみた

に公開

Maestroを使ってみた!便利なスクロールとJavaScriptの使い方

モバイルアプリのテストにMaestroを利用しています。Maestroは非常に便利なツールですが、使っている中で少し工夫が必要な場面もありました。今回は、その中で特に便利だと感じた機能や、少し工夫した使い方をTipsとして紹介します。

Maestroとは

Maestroは、公式サイトで「最もシンプルで効果的なモバイルUIテストフレームワーク」(the simplest and most effective mobile UI testing framework) と紹介されています。これまでのUIテストツールから学んだことを基に作られており、開発者がテストを書きやすく設計されています。

(引用元: Maestro公式ドキュメント

スクロールについて

長い画面やリストで、画面の外にある部品を操作したい場合にスクロール機能が役立ちます。scrollUntilVisible という命令で、この処理を簡単に書くことができます。

# "item-id-to-find"という名前の部品が見えるまで下にスクロール
- scrollUntilVisible:
    element:
      id: "item-id-to-find"

スクロール方向を変える

基本は下方向へのスクロールですが、direction を使うと4方向(UP, DOWN, LEFT, RIGHT)を指定できます。これにより、左右に動くメニューなどもテストできます。

# 上方向にスクロールして「リストの先頭」という文字を探す
- scrollUntilVisible:
    element:
      text: "リストの先頭"
    direction: UP

# 右方向にスクロールして「carousel-next-button」という名前のボタンを探す
- scrollUntilVisible:
    element:
      id: "carousel-next-button"
    direction: RIGHT

(参考: scrollUntilVisible - Maestro Docs

JavaScriptの利用について

Maestroの基本的な命令だけでは少し難しいチェックをしたい場合は、runScript を使ってJavaScriptのプログラムを呼び出すことができます。

以下のサンプルでは、画面から取得したテキストが「user-」という文字で始まっているか、JavaScriptを使ってチェックします。

Maestroの設定ファイル (test.yaml)

- copyTextFrom:
    id: "user-id-label"
- runScript:
    file: "verify-text.js"
    env:
      COPIED_TEXT: ${maestro.copiedText}
      EXPECTED_PREFIX: "user-"

JavaScriptファイル (verify-text.js)

/* global maestro, COPIED_TEXT, EXPECTED_PREFIX */

const actual = COPIED_TEXT;
const expected = EXPECTED_PREFIX;

if (!actual.startsWith(expected)) {
  throw new Error(`文字のチェックエラー: ${actual}${expected}で始まっていません`);
}

JavaScriptのログを確認する方法

JavaScript内で console.log を使って出力した内容は、そのままではコンソールのテスト実行時にlogの結果の表示が残りません。これを確認したい場合は、--debug-output というオプションを使います。

maestro test test.yaml --debug-output maestro-debug.log

こうすることで、console.log の内容が maestro-debug.log というファイルに保存され、デバッグが簡単になります。

(参考: runScript - Maestro Docs

まとめ

この記事では、Maestroを業務で使う中で便利だと感じたTipsを2つ紹介しました。

  • scrollUntilVisible で、画面の外にある部品も柔軟に操作できる。
  • runScript で、JavaScriptを使い少し複雑なチェックも行える。

これらのTipsが、これからMaestroを使う方の助けになれば幸いです。

LIFULLテックブログ

Discussion