我正在尝试使用IdlingResource编写一个Espresso测试,以检查视频播放。
我的项目托管在here
这是测试:
@RunWith(AndroidJUnit4.class)
public class RecipeFetchTest {
@Rule
public ActivityTestRule<RecipeActivity> mActivityTestRule = new ActivityTestRule<>(RecipeActivity.class);
private IdlingResource mIdlingResource;
@Before
public void registerIdlingResource() {
mIdlingResource = mActivityTestRule.getActivity().getIdlingResource();
Espresso.registerIdlingResources(mIdlingResource);
}
@Test
public void checkRecipeNameRecipeActivity() {
onView(ViewMatchers.withId(R.id.rv_recipes)).perform(RecyclerViewActions.scrollToPosition(1));
onView(withText("Brownies")).check(matches(isDisplayed()));
}
@Test
public void checkPlayerViewIsVisibleRecipeDetailActivity1() {
onView(ViewMatchers.withId(R.id.rv_recipes)).perform(RecyclerViewActions.actionOnItemAtPosition(0,click()));
onView(ViewMatchers.withId(R.id.rv_steps)).perform(RecyclerViewActions.actionOnItemAtPosition(0,click()));
withContentDescription("playerVideo"))).check(matches(isDisplayed()));
onView(withId(R.id.playerView)).check(matches(isDisplayed()));
}
@After
public void unregisterIdlingResource() {
if (mIdlingResource != null) {
Espresso.unregisterIdlingResources(mIdlingResource);
}
}
}
我得到测试失败,并显示以下错误:
android.support.test.espresso.AmbiguousViewMatcherException: '(with id:
gautamhans.xyz.bakeaid:id/playerView and is displayed on the screen to the
user)' matches multiple views in the hierarchy.
Problem views are marked with '****MATCHES****' below.
+--------->SimpleExoPlayerView{id=2131558584, res-name=playerView,
visibility=VISIBLE, width=871, height=399, has-focus=false, has-
focusable=true, has-window-focus=true, is-clickable=false, is-enabled=true,
is-focused=false, is-focusable=false, is-layout-requested=false, is-
selected=false, root-is-layout-requested=false, has-input-connection=false,
x=0.0, y=0.0, child-count=3} ****MATCHES****
+---------->PlaybackControlView{id=2131558584, res-name=playerView,
visibility=VISIBLE, width=871, height=399, has-focus=false, has-
focusable=true, has-window-focus=true, is-clickable=false, is-enabled=true,
is-focused=false, is-focusable=false, is-layout-requested=false, is-
selected=false, root-is-layout-requested=false, has-input-connection=false,
x=0.0, y=0.0, child-count=1} ****MATCHES****
根据测试,我有两个具有相同res-id的视图,即“ playerView”。
一种是SimpleExoPlayerView
另一个是PlaybackControlView
我记得定义了SimpleExoPlayerView,但没有定义PlaybackControlView。
因此,将不胜感激。
最佳答案
我有同样的问题。
我认为SimpleExoPlayer会自动生成一个PlaybackControlView。
我不知道我们是否可以避免这种情况,但是我得到了解决方法。
看这行:
onView(allOf(instanceOf(SimpleExoPlayerView.class), withId(R.id.playerView))).check(matches(isDisplayed()));
我只是添加一个Matcher以确保检查SimpleExoPlayer对象,然后检查它是否正确显示。
关于android - AmbiguousViewMatcherException意式浓缩咖啡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45611942/