98

新しいandroid-test-kit (Espresso)を使用していくつかのテストを作成しようとしています。しかし、ダイアログが表示されているかどうかを確認し、それに対していくつかのアクションを実行する方法に関する情報が見つかりません(肯定ボタンと否定ボタンをクリックするなど)。WebViewダイアログは、アプリケーション自体ではなく、によっても表示される場合があることに注意してください。

どんな助けでも大歓迎です。リンク、または基本的なサンプルコードが必要です。

  1. ダイアログが表示されるかどうかを確認する
  2. ダイアログ ボタンをクリックする
  3. ダイアログの内部ビューと対話します (カスタム ビューの場合)
  4. ダイアログの外側でクリックをプリフォームし、表示されているかどうかを確認します (たとえばsetCancelable(false)、ダイアログ ビルダーで呼び出され、それを確認したい場合)。

アドバイスありがとうございます!

4

7 に答える 7

137
  1. ダイアログが表示されるかどうかを確認するには、ダイアログ内に存在するテキストを含むビューが表示されているかどうかを確認するだけです。

    onView(withText("dialogText")).check(matches(isDisplayed()));
    

    または、id を持つテキストに基づいて

    onView(withId(R.id.myDialogTextId)).check(matches(allOf(withText(myDialogText), isDisplayed()));
    
  2. ダイアログ ボタンをクリックするには、次のようにします (button1 - OK、button2 - キャンセル)。

    onView(withId(android.R.id.button1)).perform(click());
    

    アップデート

  3. Espresso はマルチウィンドウに対応しているので可能だと思います。
  4. カスタムダイアログビューの外側をクリックするかどうかはわかりませんが、表示されているかどうかを確認するには、カスタムマッチャーを作成して内部を確認する必要があります。
于 2014-01-10T14:28:05.433 に答える
3

ボタン ID R.id.button1 と R.id.button2 は、デバイス間で同じにはなりません。ID は OS のバージョンによって異なる場合があります。

これを実現する正しい方法は、UIAutomator を使用することです。build.gradle に UIAutomator の依存関係を含める

// Set this dependency to build and run UI Automator tests
  androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'

そして使う

// Initialize UiDevice instance
UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());

// Search for correct button in the dialog.
UiObject button = uiDevice.findObject(new UiSelector().text("ButtonText"));
if (button.exists() && button.isEnabled()) {
    button.click();
}
于 2015-12-25T18:04:12.337 に答える