代码之家  ›  专栏  ›  技术社区  ›  Ali

水平滚动视图的浓缩咖啡测试

  •  0
  • Ali  · 技术社区  · 7 年前

    我有以下水平滚动视图,我以编程方式将项目添加到其中:

    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    
        <data>
    
            <variable
                name="vm"
                type="com.sample.android.tmdb.ui.detail.MovieDetailViewModel" />
        </data>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            app:visibleGone="@{vm.isTrailersVisible}">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/trailers"
                android:textAppearance="@style/TextAppearance.AppCompat.Title" />
    
            <HorizontalScrollView
                android:id="@+id/trailer_scroll_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    app:items="@{vm.trailers}" />
    
            </HorizontalScrollView>
    
        </LinearLayout>
    
    </layout>
    

    在这里我添加了一些项目:

    @JvmStatic
    @BindingAdapter("items")
    fun addItems(linearLayout: LinearLayout, trailers: List<Video>) {
    
        linearLayout.removeAllViews()
        val context = linearLayout.context
    
        for (trailer in trailers) {
            val thumbContainer = context.layoutInflater.inflate(R.layout.video, linearLayout, false)
            val thumbView = thumbContainer.findViewById<ImageView>(R.id.video_thumb)
    
            thumbView.apply {
                setOnClickListener {
                    val playVideoIntent = Intent(Intent.ACTION_VIEW, Uri.parse(Video.getUrl(trailer)))
                    context.startActivity(playVideoIntent)
                }
            }
            linearLayout.addView(thumbContainer)
        }
    }
    

    现在我想添加一个 Espresso HorizontalScrollView 然后点击第三项。直到现在我写了以下测试:

    @Test
        fun shouldBeAbleToDisplayTrailer() {
            onView(withId(R.id.list)).perform(RecyclerViewActions
                    .actionOnItemAtPosition<MovieViewHolder>(8, click()))
    
            onView(withId(R.id.trailer_scroll_view)).perform(nestedScrollTo()).check(matches(isDisplayed()))
    
            // intended(Matcher<Intent> matcher) asserts the given matcher matches one and only one
            // intent sent by the application.
            //intended(allOf(hasAction(Intent.ACTION_VIEW)))
        } 
    

    但我不知道怎么滚动 . 你能帮忙吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   denys    7 年前

    答案就在两下:

    1. 支票 scrollTo() 查看操作执行:

      public static ViewAction scrollTo() {
          return actionWithAssertions(new ScrollToAction());
      }
      
    2. 支票 ScrollToAction() 实施:

      /** Enables scrolling to the given view. View must be a descendant of a ScrollView or ListView. */
      

      为了它。我同意 描述可以稍加改进:

      withEffectiveVisibility(Visibility.VISIBLE),
      isDescendantOfA(
          anyOf(
              isAssignableFrom(ScrollView.class),
              isAssignableFrom(HorizontalScrollView.class),
              isAssignableFrom(ListView.class))));
      

      答案是-使用 ViewActions.scrollTo() HorizontalScrollView .