ご存じのように、アンドロイドはアンドロイドNのMulti-Window support modeを提供しています。私たちのアプリケーションはマルチウィンドウをサポートしています。
しかし、それをテストするには?どのように強制的にそのモードでアプリを実行する?私はInstrumentation
クラスまたは他のどこかのドキュメントにそのようなメソッドを作成していません。多分それは何とか可能ですエスプレッソ? Launch New Activities in Multi-Window Modeからマルチウィンドウモードで計測されたアクティビティを実行する
答えて
残念ながら、provided by azizbekianの方法では、以前にマルチウィンドウモードで読み込まれたアプリが必要なので、私は自分の解決策を提供したいと思います。 answerでは、プログラムでマルチウィンドウモードに入る方法を見つけました。私は完全なソリューション構築され、それを使用する:あなたが見ることができるように
UiAutomation uiAutomation = InstrumentationRegistry.getInstrumentation().getUiAutomation();
//enter multi-window mode
uiAutomation.performGlobalAction(AccessibilityService.GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN);
//wait for completion, unfortunately waitForIdle doesn't applicable here
Thread.sleep(1000);
//simulate selection of our activity
MotionEvent motionDown = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), KeyEvent.ACTION_DOWN,
150, 200, 0);
motionDown.setSource(InputDevice.SOURCE_TOUCHSCREEN);
uiAutomation.injectInputEvent(motionDown, true);
motionDown.recycle();
MotionEvent motionUp = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), KeyEvent.ACTION_UP,
150, 200, 0);
motionUp.setSource(InputDevice.SOURCE_TOUCHSCREEN);
uiAutomation.injectInputEvent(motionUp, true);
motionUp.recycle();
//perform test actions below
を、2つの回避策があります。
- は、私たちは私の避難所「
- 入るマルチモード完了を待つために
uiAutomation.waitForIdle
を使用することはできませんタスクマネージャーのアプリケーションを選択して、私たちの活動に焦点を当てる方法を見つけました。だから私は、私たちの活動の可能性のある場所についてちょうどタッチイベントを実行します。など
それを実装した後は、エスプレッソといつものように活性を試験することができるでしょう
:あなたが新しいアクティビティを起動すると
、あなたは、可能な場合には、新たな活動は、現在の1に隣接して表示しなければならないシステムにヒントすることができます。これを行うには、インテントフラグFLAG_ACTIVITY_LAUNCH_ADJACENTを使用します。 Intent.FLAG_ACTIVITY_LAUNCH_ADJACENTのドキュメントから
:
このフラグは画面分割マルチウィンドウモードで使用されています。新しいアクティビティは、それを起動するアクティビティに隣接して表示されます。これは、FLAG_ACTIVITY_NEW_TASKと組み合わせてのみ使用できます。また、既存のアクティビティの新しいインスタンスを作成する場合は、FLAG_ACTIVITY_MULTIPLE_TASKを設定する必要があります。
テストの下で活動を開始する方法here示すように:
@Test
public void customIntentToStartActivity() {
Intent intent = new Intent(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT)
| Intent.FLAG_ACTIVITY_NEW_TASK);
mActivity = mActivityRule.launchActivity(intent);
}
注、これはドキュメントに基づいて、私の推測では、それを試していないです。 、それは私には思えますが、あなたは最初「偽」活動を開始する必要があり、かつ、マルチウィンドウモードであっ打ち上げテスト活動からので「新しい活動は1つがそれを起動に隣接して表示されます」 、指定されたIntent
フラグでそれを起動する別のアクティビティがあるはずです。
おかげで、私はあなたが私の答えの選択を解除し、正しいとフルとしてあなたをマークすべきだと思う – Beloo
- 1. ウィンドウの表示で予測される実行計画のエラー
- 2. 計測器でTime Profilerを実行するとIPadがリセットされる
- 3. Android N +でアクティビティのマルチウィンドウモードを無効にする方法
- 4. Androidがすべて実行されたときに計測されたテストが失敗する
- 5. ContentProviderの計測テストを実行
- 6. 集計された数値データの合計を測定する
- 7. Javaアプリケーション(バイトコードだけでなく)の実行を計測する
- 8. MVPの計測テストで第2アクティビティをテストする方法は?
- 9. リクエストで実行されたクエリの合計を取得する
- 10. アクティビティが実行されています
- 11. 「runOnUIThread」アクティビティに戻るたびにインクリメンタルに実行されます
- 12. アクティビティが表示された後にAsyncTaskを実行します。
- 13. 新しいAndroid Kotlinプロジェクトで計測されたテストを実行できません
- 14. マルチウィンドウモードで新しいアクティビティを開始するときにAndroid onStop()が呼び出されない
- 15. KnockoutJS - 条件文で計算された観測を行う方法は、
- 16. ピン:指定された共有ライブラリを計測する
- 17. クエリが実行される時間を測定するiPad
- 18. アクティビティが開始されるたびにリスナーが実行されています
- 19. サイクルカウンターでプログラムの実行時間を計測
- 20. Androidのネイティブドライバapiエラーで計測器コマンドを実行中
- 21. メソッドの行を計測する
- 22. 最も高い観測が実行されました
- 23. JVM - 実行中の(計測されていない)セッションでクラスのインスタンスを取得する
- 24. フィルタリングされたDataGridViewで計算を実行
- 25. 将来的にJavaバイトコード計測を実行する方法は何ですか?
- 26. SonarQubeはPowerMockitoで実行されたユニットテストを測定できません
- 27. CountDownTimerは、アクティビティの切り替え時に古いアクティビティで実行されます。
- 28. アンドロイド計測器テスト実行中にcmdコンソールでログを出力する方法
- 29. アクティビティの作成はアプリが初めて実行されたときにのみ実行されます
- 30. アプリケーションの実行中に最初に実行されたアクティビティが表示されます
それを試してみましょう回答。 – azizbekian
@azizbekian ok、とにかくありがとう – Beloo