Shirates 試してみる
リポジトリ
前提
AndroidStudioインストール&セットアップ済み
コンソールからadbが使える状態
追加でインストールしたもの
IntelliJ IDEA
Appiumインストール
npm install -g appium@next
appium driver install uiautomator2
これで、最低限Androidアプリのテストが実行できる状態
Android Settings Demo を実行してみる
- shirates-core をダウンロードしてIntelliJで開く
- 'testrun.global.properties' を開き、’android.profile=Pixel 6 API 33’ をコメントアウト
- 'android.profile=10' (手持ちの端末がAndroid 10)をコメントイン
- src/test/kotlin/demo/AndroidSetingsDemo.kt を開いてクラス名左の▷をクリックして実行
- テスト結果のコンソールからログファイルのパスをクリックして結果を確認する
Android10だと Airplane mode が初期状態では表示されないのでコケる
testConfig/android/androidSettings/screens に各画面の定義がjsonで定義されている
PageObjectPatternっぽい
"[Network & internet]": "",
は [Network & internet]
というニックネームで、'Network & internet'というテキストのセレクター
使用する時は
it.tap("[Network & internet]")
という感じで使う。
ニックネームの囲いは [ ]
{ }
の2パターンあるが
"[ ]" are recommended for static content. "{ }" are recommended for dynamic content.
とのこと。
詳しくは selector_nickname.md を参照
Gradle でテスト実行する時は
./gradlew cleanTest test
特定のテストのみ実行したい時は
./gradlew cleanTest test --tests "demo.AndroidSettingsDemo"
テストを書く際、画面要素を確認するのは Appium Inspector
appium &
で、Appiumサーバーを起動
Appium Inspector も起動して、こんな感じでCapabilitiesを指定して Start Session
一からプロジェクトを作る時の参考
Appium単体との比較
DeepLinkでアプリが起動するか確認する時は
it.terminateApp()
でアプリを一旦終了して
appiumDriver.executeScript(
"mobile: shell",
mapOf(
"command" to "am",
"args" to listOf(
"start",
"-a",
"android.intent.action.VIEW",
"-d",
"'[DeepLinkで起動するURL]'"
)
)
)
でamコマンドを直接実行することでDeepLink発火できる。
あとはscreenIs
で画面が開かれているか確認する
(appiumDriver.get()
はアプリでそのリンクをハンドリングしようとして失敗するため使えなかった)
iOS
Carthage をインストール (appium-doctorが必要って言ってた)
brew install carthage
Driver をインストール
appium driver install xcuitest
ios.profile=[UDID]
だとちゃんと選ばれないことがある
ios.profile=iPad Pro (12.9-inch) (6th generation)
が正解
iOSのテストで AppiumProxy.getSource() timed out
がでた時はdriverをアップデートしてみる
appium driver update xcuitest