它似乎CoordinatorLayout打破了Espresso行为的行为,如scrollTo()或RecyclerViewActions.scrollToPosition().
对于像这样的布局:
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
...
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
...
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
如果我尝试滚动到NestedScrollView使用ViewActions.scrollTo()第一个问题内部的任何视图我发现是我得到了PerformException.这是因为这个动作只支持ScrollView并NestedScrollView不会扩展它.此处解释了此问题的解决方法,基本上我们可以复制代码scrollTo()并更改约束以支持NestedScrollView.这似乎有效,如果NestedScrollView它不在一个CoordinatorLayout但只要你把它放在CoordinatorLayout滚动动作失败.
对于相同的布局,如果我替换了NestedScrollViewa RecyclerView,则滚动也存在问题.
在这种情况下,我正在使用RecyclerViewAction.scrollToPosition(position).不像NestedScrollView,在这里我可以看到一些滚动发生.但是,它看起来像滚动到错误的位置.例如,如果我滚动到最后一个位置,它会显示倒数第二个但不是最后一个.当我移动RecyclerView了的CoordinatorLayout滚动运作,因为它应该.
目前我们无法CoordinatorLayout为因此问题而使用的屏幕编写任何Espresso测试.任何遇到相同问题或知道解决方法的人?
android android-espresso android-recyclerview coordinator-layout android-nestedscrollview
使用Espresso我尝试滚动到linearlayout内的textview - 但是我得到了这个例外:
android.support.test.espresso.PerformException: Error performing 'scroll to' on view 'with id:
org.ligi.gobandroid_hd:id/final_points'.
at android.support.test.espresso.PerformException$Builder.build(PerformException.java:83)
at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:70)
at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:53)
at reporting.SpooningFailureHandler.handle(SpooningFailureHandler.java:31)
at android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:184)
at android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:115)
at android.support.test.espresso.ViewInteraction.perform(ViewInteraction.java:87)
at org.ligi.gobandroidhd.uitest.TheGameScoringActivity.testThatTapToMarkWorks(TheGameScoringActivity.java:65)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:115)
at junit.framework.TestResult.runProtected(TestResult.java:133)
at android.support.test.internal.runner.junit3.DelegatingTestResult.runProtected(DelegatingTestResult.java:90)
at junit.framework.TestResult.run(TestResult.java:118)
at android.support.test.internal.runner.junit3.AndroidTestResult.run(AndroidTestResult.java:49)
at junit.framework.TestCase.run(TestCase.java:124)
at android.support.test.internal.runner.junit3.NonLeakyTestSuite$NonLeakyTest.run(NonLeakyTestSuite.java:63)
at junit.framework.TestSuite.runTest(TestSuite.java:243)
at junit.framework.TestSuite.run(TestSuite.java:238)
at android.support.test.internal.runner.junit3.DelegatingTestSuite.run(DelegatingTestSuite.java:103)
at android.support.test.internal.runner.junit3.AndroidTestSuite.run(AndroidTestSuite.java:63)
at android.support.test.internal.runner.junit3.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) …Run Code Online (Sandbox Code Playgroud) 我正在尝试用Espresso测试NestedScrollView,但出现错误:
“将不会执行操作,因为目标视图与以下一个或多个约束不匹配:至少90%的视图区域显示给用户。”
我知道此错误是因为Android未检测到要单击的按钮,也就是说,我需要滚动到底部才能看到该按钮。我也已经阅读了scrollTo()对NestedScrollView不可用,所以我不能使用它。我想我必须滚动到NestedScrollView的底部才能看到该按钮,我既不确定这一点,也不知道该怎么做。
我想单击红色按钮,但它没有可见性。我已经看到了几个堆栈问题和一些教程,但是我不知道如何滚动到嵌套的底部。
应用程序工具栏的代码为:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.findandgo.activity.MenuPrincipal"
>
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/appbar_padding_top"
android:theme="@style/AppTheme"
>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll"
app:popupTheme="@style/AppTheme.AppBarOverlay"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"/>
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />`
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
NestedScrollView的代码为:
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_evento_crear"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_vertical"
android:background="@drawable/fondo"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".Evento"
>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:nestedScrollingEnabled="false"
android:padding="@dimen/size_20"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<com.findandgo.custom.CustomFontEditText
android:id="@+id/idEtEventoNuevoNombre"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/idSpEventoNuevoCategoria"
android:layout_alignStart="@+id/idSpEventoNuevoCategoria"
android:layout_below="@id/tool_bar"
android:hint="@string/sEventoNombre"
android:textSize="@dimen/size_12"
app:font="@string/font_name_source_amatic_regular" …Run Code Online (Sandbox Code Playgroud) android android-layout android-espresso android-nestedscrollview
android ×3