には2つのViews
があり、ネットワークの状態によって表示されます。ビューの可視性がなくなったときにエスプレッソNoMatchingViewExceptionをスローしない
LinearLayout recyclerView = (LinearLayout) findViewById(R.id.recycler_view);
LinearLayout errorParent = (LinearLayout) findViewById(R.id.error_parent);
if(Utils.isNetworkAvailable()){
recyclerView.setVisibility(View.VISIBLE);
errorParent.setVisibility(View.GONE);
}else{
recyclerView.setVisibility(View.GONE);
errorParent.setVisibility(View.VISIBLE);
}
私は、ネットワーク条件をテストするためのエスプレッソテストを作成しました。テストを実行する前に、私は手動でインターネットをオフにします。
ViewInteraction viewInteraction = onView(withId(R.id.recycler_view));
viewInteraction.check(matches(isDisplayed()));
ないインターネットがないので、recycler_view
はGONE
であり、したがって、ビュー階層に存在しません。しかしコードを実行するときに私はNoMatchingViewException
を得ていません。理想的には、ビューが階層に存在しないときは、私は上記の例外を取得する必要があります。代わりに私はAssertionFailedError
を得ています。
この動作の理由は何ですか?
詳細な回答ありがとうございます。私はあなたが言及したステップを通ってデバッグしました。明らかにEspressoはこの行の階層内のビューを見つけることができます。targetView = viewFinder.getView()。これはtargetViewをnull以外として返します。しかし、UIAutomatorを経由すると、階層にrecycler_viewが表示されません。理想的には、ここでも見解を得るべきではありません。 – thedarkpassenger
ビューが階層に存在し、その後ビューの可視性がGONEに設定されている場合、EspressoはNoMatchingViewExceptionをスローしないと仮定します。 – thedarkpassenger