flo*_*cca 3 android android-espresso
我有这项测试的时间大约是一半。
  @Test
  public void thirdSwipe() {
    onView(withId(R.id.pager)).perform(swipeLeft());
    onView(withId(R.id.pager)).perform(swipeLeft());
    onView(withId(R.id.pager)).perform(swipeLeft());
    onView(allOf(withId(R.id.hint_english_text), withText("dog 0a"))).check(matches(isDisplayed()));
  }
我得到这个失败:
android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: 'is displayed on the screen to the user' doesn't match the selected view.
Expected: is displayed on the screen to the user
Got: "TextView{id=2131427358, res-name=hint_english_text, visibility=VISIBLE, width=624, height=62, has-focus=false, has-focusable=false, 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=20.0, y=20.0, text=dog 0a, input-type=0, ime-target=false, has-links=false}"
因此,看起来好像找到了TextViewwith "dog 0a",但无法识别它。我看了其他问题,并用设置了文本String,这只是我课堂上的几行:
private String  englishText;
englishTextView.setText(englishText);
另外,我正在使用allOf()。任何帮助,将不胜感激。该视图位于ViewPager的视图内,因此我不确定测试是否在ViewPagerid 之前进行,但是它确实说它找到了视图。
小智 5
您肯定在怠速问题上走了正确的路。在执行滑动后,Espresso无法知道ViewPager何时完全稳定。正如失败所暗示的那样,您要查找的视图位于视图层次结构中的某个位置,这意味着它已被渲染,但是Espresso正在检测它尚未显示在屏幕上。这是因为ViewPager尚未完全稳定在您感兴趣的页面上。
下一个问题是如何告诉Espresso等待ViewPager解决。这是一个很难解决的问题。
消除此问题可能性的一种方法是执行Thread.sleep,这将迫使Espresso等待一段时间,并希望ViewPager在等待结束之前解决。虽然这通常可以在足够长的睡眠时间下工作,但这并不理想,因为这会增加不必要的测试时间。
最好的方法是让ViewPager告诉我们何时完全解决。
如果您查看一些可用于ViewPager的侦听器,其中的一个是OnPageChangeListener。这个类有几个回调方法:onPageScrolled,onPageScrollStateChanged,和onPageSelected。
onPageSelected 听起来像是一个不错的选择,但是如果您仔细阅读该方法的文档,您会发现它说 
/**
 * This method will be invoked when a new page becomes selected. Animation is not
 * necessarily complete.
 */
所以这行不通。
onPageScrollStateChanged是另一个很好的候选人。该报告在ViewPager,即一对夫妇的状态变化SCROLL_STATE_DRAGGING,SCROLL_STATE_SETTLING和SCROLL_STATE_IDLE。因此,使用此回调,我们可以检测到ViewPager何时变为空闲状态。
关于如何将此侦听器的实例与ViewPager和Espresso挂钩,您可以查看Espresso提供的此实现,以在DrawerLayouts上执行操作并类似地等待它们解决。这样做的主要目的是创建一个自定义ViewAction来使用,它将这些侦听器之一附加到ViewPager上,然后执行滑动操作并等待ViewPager报告它已进入SCROLL_STATE_IDLE。
请注意,此实现使用反射DrawerListener从DrawerLayout中移除并包装(如果存在)在附加它自己的之前,但是在ViewPager的情况下这不是必需的,因为ViewPager可以有多个OnPageChangeListeners附件。
| 归档时间: | 
 | 
| 查看次数: | 962 次 | 
| 最近记录: |