Как я могу выполнять действия на слайдере (перемещать курсор)?
Как я могу проверить значение слайдера?
Существуют ли какие-либо существующие функции для этого?
Слайдер выглядит так:
<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( -> TODO <- )
Для этого легко создать пару методов.
Вот что у меня есть:
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 может это сделать). Поскольку вопрос не помечен языком, я не знаю, какой из них вам нужен, отметьте его в следующий раз.
Я только что протестировал! Прекрасно работает. Я сделал небольшое улучшение, чтобы сделать код более пригодным для повторного использования. Это упрощает выполнение утверждения на любом слайдере. :D fun assertSlider(@IdRes sliderId: Int, initialValue: Float, onChangedValue: Float) { onView(withId(sliderId)).check(matches(withValue(initialValuee))) onView(withId(sliderId)).perform( setValue(onChangedValue)) onView(withId(sliderId)).check(matches(withValue(onChangedValue))) } Затем я просто вызываю из любого теста: assertSlider(R.id.sliderViewId, 50.0f, 200.0f)
Прекрасный!!! Очень очень полезно! Большое спасибо @jeprubio