android - AmbiguousViewMatcherException Espresso

标签 android android-espresso exoplayer

我正在尝试使用 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 的 View ,即“playerView”。

一个是SimpleExoPlayerView 另一个是PlaybackControlView

我记得定义了 SimpleExoPlayerView 但没有定义 PlaybackControlView

因此,我们将不胜感激。

最佳答案

我也遇到了同样的问题。

我认为 SimpleExoPlayer 会自动生成一个 PlaybackControlView。 我不知道我们是否可以避免这一代,但我找到了解决方法。

看这一行:

onView(allOf(instanceOf(SimpleExoPlayerView.class), withId(R.id.playerView))).check(matches(isDisplayed()));

我只是添加了一个 Matcher 以确保检查 SimpleExoPlayer 对象,然后检查它是否正确显示。

关于android - AmbiguousViewMatcherException Espresso ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45611942/

相关文章:

android - Spoon & Espresso - 构建成功。就是这样?

android - Android重复声音滞后

Android AlarmManager 有时会迟到

java - 保存 List<Integer> 的状态

android - 如何使用 ExoPlayer 从服务器流式传输 mp4 视频?

android - 如何使用 Exoplayer 使视频全屏而不拉伸(stretch)

android - ExoPlayer的PlayerView如何使用TextureView代替SurfaceView?

android - 何时转义字符串资源中的实体?

Android:跨模块共享测试代码

android - Espresso UI 测试已取消且没有错误消息