【问题标题】:Androidx : How to test Slider in UI tests (Espresso)?Androidx:如何在 UI 测试(Espresso)中测试 Slider?
【发布时间】:2021-03-31 01:24:06
【问题描述】:

如何在滑块上执行操作(移动光标)?

如何查看滑块值?

是否有任何现有的功能?

滑块看起来像这样:

<com.google.android.material.slider.Slider
            android:id="@+id/sliderRating"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:stepSize="1"
            android:valueFrom="1.0"
            android:valueTo="5.0" />

和浓缩咖啡检查:onView(withId(R.id.sliderRating)).check( -&gt; TODO &lt;- )

【问题讨论】:

    标签: android slider android-espresso


    【解决方案1】:

    很容易创建几个方法来做到这一点。

    这是我所拥有的:

    fun withValue(expectedValue: Float): Matcher<View?> {
        return object : BoundedMatcher<View?, Slider>(Slider::class.java) {
            override fun describeTo(description: Description) {
                description.appendText("expected: $expectedValue")
            }
    
            override fun matchesSafely(slider: Slider?): Boolean {
                return slider?.value == expectedValue
            }
        }
    }
    
    fun setValue(value: Float): ViewAction {
        return object : ViewAction {
            override fun getDescription(): String {
                return "Set Slider value to $value"
            }
    
            override fun getConstraints(): Matcher<View> {
                return ViewMatchers.isAssignableFrom(Slider::class.java)
            }
    
            override fun perform(uiController: UiController?, view: View) {
                val seekBar = view as Slider
                seekBar.value = value
            }
        }
    }
    

    第一个,自定义视图匹配器,用于测试Slider 是否具有特定值,第二个,自定义视图操作,用于设置新值。

    一个简单的测试示例,使用它们只是为了了解它们的工作原理:

    @Test
    fun testSlider() {
        onView(withId(R.id.sliderRating)).check(matches(withValue(1.0F)))
    
        onView(withId(R.id.sliderRating)).perform(setValue(2.0F))
    
        onView(withId(R.id.sliderRating)).check(matches(withValue(2.0F)))
    }
    

    此测试首先检查滑块的值是否为 1.0,然后将其值更改为 2.0,并使用匹配器检查该值现在是否为 2.0。

    我有 kotlin 中的代码,但如果您在 java 中需要它,它可以很容易地转换(android studio 可以做到)。由于问题没有用语言标记,不知道你需要哪一种,下次再标记。

    【讨论】:

    • 可爱!!!非常非常好用!非常感谢@jeprubio
    • 我刚刚测试过!效果很好。我做了一点改进,使代码更易于重用。它使在任何滑块上进行断言变得更加容易。 :D fun assertSlider(@IdRes sliderId: Int, initialValue: Float, onChangedValue: Float) { onView(withId(sliderId)).check(matches(withValue(initialValue))) onView(withId(sliderId)).perform(setValue( onChangedValue)) onView(withId(sliderId)).check(matches(withValue(onChangedValue))) } 然后,我只需从任何测试中调用:assertSlider(R.id.sliderViewId, 50.0f, 200.0f)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    相关资源
    最近更新 更多