当前位置: 首页 > 知识库问答 >
问题:

使用android espresso测试带有多个片段的ViewPager

慕容典
2023-03-14
onView(withId(R.id.container_weather))
    .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)));

但问题是espresso看起来是所有的页面,而不仅仅是当前页面,我得到以下错误:

Android.support.test.espresso.ambiguousViewMatcherException:“with id:eu.airpatrol.android:id/container_weather”匹配层次结构中的多个视图...

共有1个答案

鲁烨
2023-03-14

我也遇到过同样的问题,但是使用条件iscompletelyDisplay()解决了这个问题,因为它只考虑屏幕上的视图。

所以,像这样的事情应该奏效:

onView(allOf(withId(R.id.container_weather), isCompletelyDisplayed()))
.check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)));

注意:issplayed()在某些情况下也可以工作,但是它也考虑到了屏幕外的视图,如果ViewPager有任何其他页面pr片段加载了相同的视图ID,它就不能工作了。

 类似资料:
  • 所以我有一个用于片段的容器,称为“容器”,它是一个FrameLayout。 在这个容器中,我使用名为CollectionsFragment的视页放置了一个片段。 null 我正在使用一个FragmentStatePagerAdapter,并将CollectionsFragment的getChildFragmentManager()传递给适配器。 我还有一个用于活动容器的onBackstackCha

  • 根据谷歌的文档: 现在可以在片段中嵌入片段。这对于各种情况都很有用,在这些情况下,您需要将动态和可重用的UI组件放置到本身是动态和可重用的UI组件中。例如,如果使用ViewPager创建左右滑动并占用大部分屏幕空间的片段,现在可以将片段插入每个片段页面。要嵌套片段,只需对要添加片段的片段调用getChildFragmentManager()。这将返回一个FragmentManager,您可以像通常

  • 现在,我想使用Parse添加服务器拉请求,将列表中的数据添加到适配器,并在用户查看页面后填充recyclerview,这样 1)我是否应该添加setUserVisisbleHint中的所有代码,并只添加0.5秒延迟,以便在调用setContentView后执行它,以确保不出现空指针异常错误或 2)是否有更好的方法/其他功能可以实现相同的功能?

  • 我只看到两种方法: 将所有字段设置为受保护(或包可见性) 为所有字段生成50个getter 创建50个委托方法来获取这些字段的状态,而不是整个对象的状态 在正常情况下,我会选择最后一个(尽管我真的不想仅仅出于测试的原因而改变界面)。但是在我的类中编写50个新方法只是为了测试真的有意义吗?在这种情况下,将字段设置为受保护的不是更好吗,因为有这么多方法,类会变得不清楚? 注意。反射是我想使用的最后一个

  • 下面是logcat: 12-15 13:15:30.763 295 33-29533/com.example.hieul.hismartversearch e/androidruntime:致命异常:main process:com.example.hieul.hismartversearch,pid:29533 java.lang.nullpointerexception:试图在Android.

  • 问题内容: 我有一个带有gridview的适配器,可以用作活动。我正在尝试将其放在Fragment中并进行转换,但是它不起作用。当我在Activity中包含IconFragmentSystem时,当我尝试打开Activity时会强制关闭。 我知道活动有效,因为我可以使用其他片段,并且一切都很好,所以我知道我的问题出在此文件中。 我尝试了不同的方法来实现此目的,但都失败了,我真的可以使用帮助将我指向