3

私は Android の機能テストを書いています。それらが機能するためには、デバイスが起動していて、アプリケーションが視覚化されている必要があります。そのためにAndroid 開発者に相談しました。ただし、提案されたソリューションにはいくつかの問題があります。

  • 提案された方法には現在、いくつかの非推奨の方法があります。Android API は、ウィンドウでフラグを使用するようにアドバイスするようになりました。

このクラスは API レベル 13 で廃止されました。代わりに FLAG_DISMISS_KEYGUARD や FLAG_SHOW_WHEN_LOCKED を使用してください。これにより、アプリケーションがフォアグラウンドに出入りするときにキーガードをシームレスに非表示にすることができ、特別なアクセス許可を要求する必要はありません。キーガードを無効化/再有効化できる newKeyguardLock(String) によって返されるハンドル。

私はこの提案を試みましたが、非推奨の解決策とは対照的に、フラグ 1 jsut は機能しません - デバイスのロックを解除しません。また、フラグソリューションの不安定性を確認するソースも見つけました(例:この回答へのコメント)。

  • 2 つ目の問題は、テスト対象のアプリケーションにアクセス許可を追加する必要があることです。これはかなり間違ったアプローチだと思います(テストできるようにするためにテスト中のコードを変更します)。そのために使用するようにアドバイスする場所をいくつか見つけましsrc/debug/AndroidManifest.xml(たとえば、これとこれ)。ただし、記載されているとおりには発生しません。デバッグ Mainfest は、デバイスに展開されたものに含まれません。ビルドとデプロイの方法に関連していますか? 開発には Eclipse (ADT) を使用します。このマニフェスト インジェクションは、ant のようなビルド ツールを使用した場合にのみ機能しますか?

全体として、テストの実行中にデバイスのロックを解除して起動し続けるための安定したソリューションについて、誰かがアドバイスできますか?

編集

RobotiumunlockScreenのフレームワークの最新バージョンには、メソッドも含まれていることがわかりました。上記で提案されたウィンドウフラグを正確に使用しており、私のデバイスでも動作していません。

4

4 に答える 4

1

UiDevicehaswakeUp()メソッドのインスタンス

このメソッドは、画面がオフの場合に電源ボタンを押すことをシミュレートし、画面が既にオンの場合は何もしません。画面がオフで、オンになったばかりの場合、このメソッドは 500 ミリ秒の遅延を挿入して、デバイスがウェイクアップして入力を受け入れる時間を確保します。

ただし、画面のロックを解除するための同様の方法が存在することは知られていないため、現在の解決策はロックパターンを削除することです (テストデバイスではNONEに設定します)。

于 2016-03-18T13:22:29.200 に答える
0

Robotium テストを実行しているときに、アンロックの信頼性が低いという同じ問題がありました。確実に機能するデバイスのロックをプログラムで解除する解決策は見つかりませんでしたが、回避策として行ったことが 2 つあります。

  • ロック画面を無効にするだけです ( Settings -> Security -> Screen lock -> None)。理想的ではありませんが、結局のところ、信頼できるテストが重要です。

  • 非アクティブなために画面がオフにならないようにするには、「Stay Awake」設定を有効にします ( Settings -> Developer options -> Stay awake)。一部の OEM/携帯電話には、そのオプションがないか、とにかく電源がオフになっているため、それらの厄介なデバイス用にKeepScreenOnアプリをインストールしました。

警告: 1 日 24 時間、ホーム画面に座って画面をオンのままにしておくと、画面の焼き付きやゴーストが発生する可能性があります。これが永続的かどうかはわかりませんが、これに注意してください。私たちの場合、専用のテスト デバイスを使用していたので、大したことではありませんでした。

また、携帯電話の画面は常にオンになっているため、明るさを暗くしてバッテリーの消費を抑えることもできます (USB 経由の充電は時間がかかる場合があります)。

于 2014-06-23T20:32:47.427 に答える
0

これまでのところ、私にとってうまくいっているのは、テストの直前にウェイク デバイス スクリプトを起動することだけです。スクリプトは、キー イベントをすべてのデバイスに送信することで、cli からデバイスのロックを解除します。私の経験では、一部のロック解除は重要です。デバイスによっては、cli からロックを解除できない場合があります (スワイプする必要があります)。その場合、Google Play で「ロックなし」アプリを探すことをお勧めします。すべてのデバイスで動作するわけではありません。

Gradle ビルド プロセス中にインストルメンテーション テストを実行する前に、同じことを行う Gradle プラグインに取り組んでいます。

于 2016-04-25T12:53:24.593 に答える