Espresso でビューが表示されているかどうかを確認しようとしています。以下は、私が試していることを示す擬似コードです。
if (!Espresso.onView(withId(R.id.someID)).check(doesNotExist()){
// then do something
} else {
// do nothing, or what have you
}
しかし、私の問題は.check(doesNotExist())
ブール値を返さないことです。これは単なるアサーションです。UiAutomator を使用すると、次のような操作を実行できました。
if (UiAutomator.getbyId(SomeId).exists()){
.....
}
ベストアンサー1
テストにおける条件付きロジックは望ましくないそれを念頭に置いて、Espresso の API は、テスト作成者がそのリスクを回避するように設計されています (テスト アクションとアサーションを明示的に指定することによって)。
そうは言っても、独自の ViewAction を実装し、isDisplayed チェック (perform メソッド内) を AtomicBoolean にキャプチャすることで、上記を実現できます。
もう 1 つのあまりエレガントではないオプション - 失敗したチェックによってスローされる例外をキャッチします。
try {
onView(withText("my button")).check(matches(isDisplayed()));
//view is displayed logic
} catch (NoMatchingViewException e) {
//view not displayed logic
}
拡張機能を備えた Kotlin バージョン:
fun ViewInteraction.isDisplayed(): Boolean {
try {
check(matches(ViewMatchers.isDisplayed()))
return true
} catch (e: NoMatchingViewException) {
return false
}
}
if(onView(withText("my button")).isDisplayed()) {
//view is displayed logic
} else {
//view not displayed logic
}