下の画像のように、チェックボックス付きのオーバーフロー メニューを備えた UI のテストを作成しています。各チェックボックスの状態を確認してトグルしたいのですが、合わせ方がわかりずらいです。チェックボックスとそのラベルは別のビューなので、チェックボックスを一致させることができず、どちらも機能withText()
しhasSibling()
ません。レイアウトはメニュー フレームワークによって生成されるため、チェックボックスの ID を制御することはできません (両方とも ID "checkbox" を持っています)。
メニューはこんな感じです。
これは、チェックボックスを一致させてトグルする私の試みです。で失敗しますNoMatchingViewException
。
private static void toggleMenu(String label, boolean initial) {
openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext());
ViewInteraction v = onView(allOf(instanceOf(CheckBox.class), hasSibling(withText(label)), isCompletelyDisplayed()));
if(initial)
v.check(matches(isChecked()));
else
v.check(matches(not(isChecked())));
v.perform(click());
openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext());
v = onView(allOf(instanceOf(CheckBox.class), hasSibling(withText(label)), isCompletelyDisplayed()));
if(!initial)
v.check(matches(isChecked()));
else
v.check(matches(not(isChecked())));
pressBack();
}