Appium1.4.0の変更でwaitForAppScriptでテスト開始タイミングを調整する必要があった

Appium 1.4.0から、iOSアプリのテストを行おうとした時にinstrumentsの起動、sessionの確立が成功した後に Error("App did not have elements")); とエラーが表示されてテストが中断することが見られるようになりました。

これは、例えばプライバシーダイアログを初回アプリインストール時に表示するような、システムダイアログが表示されるアプリで発生するようになってます。

これは、以下のコードに含まれる

https://github.com/appium/appium/blob/2b0ede71d1a2f50376a2edcd15636cfa9e9b8f1e/lib/devices/ios/ios.js#L457

if (appEls.length > 0 && !IOS.isSpringBoard(sourceObj.UIAApplication)) {

!IOS.isSpringBoard(sourceObj.UIAApplication) がtrueになるため、はかれるエラーです。

これはアプリ起動直後にSpringBoardが表示されて偽陽性(false positive)を検出してしまうことを避けるために入れられました。ただ、意図してシステムダイアログが出るようなアプリだと、誤ってfalseと判断されるようになりました。

一方、アプリ起動を待つために waitForAppScript というcapabilityが用意されています。これは、独自で定義した条件にマッチするまでテストシナリオの実施を待つ、というものです。これを使うことで、先ほどの問題を回避することが可能です。

例えば、簡単な対応として

  • waitForAppScript:true;“

としておくことで、問題となる条件分岐を通らなくなります。ここら辺をもう少し調整しておくと、柔軟にテスト開始タイミングを調整することも可能ですね。

なお、すでにissueでも報告さえていました。その時の回避策が waitForAppScript の利用です。
https://github.com/appium/appium/issues/4971

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中