Appiumを使ってUIテストの自動化を進めていてよく使う操作の備忘。

Appiumとは

Appium は Sauce Labsが中心となって開発しているスマートデバイスのUIテストを自動化することができるOSSです。
仕組みはNodeJS上で動作し、Selenium WebDriver の一種ですのでArchitectureも似ています。
OSのサポートもAndroid 2.3.3以降、iOS 6.0以降をサポートしており、また開発が活発で最新のOSバージョンの対応も早いです。
スマートデバイスの領域でのUIテスト自動化の中では有力かと考えています。

Architectureや細かなAppiumの内容は以下の記事等を参考に。 http://www.atmarkit.co.jp/ait/articles/1504/27/news025.html

Tips

capabilities

いわゆる設定。

日本語文字列の入力許可

# 共通
"unicodeKeyboard": true

AndroidでのActivityの指定

ワイルドカードが使えるから jp.co.hoge.*とかでもOK

# Android
"appWaitActivity": "*"

iOSでのシステムダイアログ許可

システムダイアログのAllowを押す

# iOS
"autoAcceptAlerts": true

UIイベント

Java で利用する際のコードサンプル。

wait

対象のUIが操作可能になるまで待つ。

AndroidDriver driver = (AndroidDriver) device.getDriver();
WebDriverWait wait = new WebDriverWait(driver, 30);
// e.g. 特定のダイアログの表示待ち
wait.until(ExpectedConditions.elementToBeClickable(this.view.dialogBtn));  // ここで指定したエレメントがクリックできる状態まで待つ

タップ

特定のUIをタップする。

// タップする対象のエレメント(element)
AndroidDriver driver = (AndroidDriver) device.getDriver();
TouchAction action = new TouchAction(driver);

// performの実行を忘れると動かないので注意
action.tap(element).perform();

ドラッグ&ドロップ

// ドラッグ対象のエレメント(src), ドロップ先(dest)
AndroidDriver driver = (AndroidDriver) device.getDriver();
TouchAction action = new TouchAction(driver);

// performの実行を忘れると動かないので注意
action.longPress(src).moveTo(dest).release().perform();

システムダイアログで許可を押す

AndroidDriver driver = (AndroidDriver) device.getDriver();
driver.SwitchTo().Alert().Accept();