Я надеюсь, что некоторые из них могут помочь мне пролить свет на пользовательские представления. Я запустил Record Espresso Test и android-studio сгенерировал следующий код.
ViewInteraction textInputEditText = onView(
allOf(withId(R.id.edit_text_last_name),
childAtPosition(
allOf(withId(R.id.layout_item_viewpager),
childAtPosition(
withId(R.id.layout_my_activity),
0)),
1),
isDisplayed()));
textInputEditText.perform(replaceText("a"), closeSoftKeyboard());
}
private static Matcher<View> childAtPosition(
final Matcher<View> parentMatcher, final int position) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("Child at position " + position + " in parent ");
parentMatcher.describeTo(description);
}
@Override
public boolean matchesSafely(View view) {
ViewParent parent = view.getParent();
return parent instanceof ViewGroup && parentMatcher.matches(parent)
&& view.equals(((ViewGroup) parent).getChildAt(position));
}
};
}
Код, сгенерированный Record Espresso Test, работает, я не уверен, как работают дочерние представления или что 0 и 1 делают в этом блоке кода.
Я прочитал довольно много информации о сопоставителях Hamcrest и о том, как создавать настраиваемые сопоставители, но мне трудно найти материал, относящийся к сгенерированному Android-коду. Любая помощь здесь будет принята с благодарностью.