Мне нужно протестировать настольное приложение Compose Multiplatform. В коде у меня есть составной элемент:
Slider(modifier = Modifier.testTag("myslider"))
Как я могу изменить его значение в моем тесте? Я попробовал пример со смахиванием:
@Test
fun testSwipeHorizontal() {
launchContent()
composeTestRule.onNodeWithTag("myslider")
.performGesture {
swipeLeft()
}
}
который компилятор предлагает заменить на performTouchInput()
. Что дальше, я не смог найти.
Также я пытался использовать нажатие клавиш, потому что Page Up/Page Down может изменить положение ползунка.
composeTestRule.onNodeWithTag("myslider")
.performKeyPress(KeyEvent.VK_PAGE_DOWN)
Но VK_PAGE_DOWN
имеет тип Int, а не KeyEvent.
Есть ли способ проверить слайдер в данный момент?
Я нашел простое решение. Если я знаю width
моего слайдера и его maxvalue
, я могу написать:
val width = 240
val delta = width / maxvalue
for (i in 0..< maxvalue){
with(rule.onNodeWithTag("myslider")) {
performMouseInput {
click(Offset((i * delta + 1).toFloat(), 0f))
}
}
rule.onNodeWithTag("mytext").assertTextEquals((i + 1).toString())
}
Таким образом, я могу проверить, изменился ли mytext
, нажав на ползунок.
Кстати, на моем ПК это отлично работало, но сборка на сервере развертывания не удалась, поэтому мой коллега предложил другой способ: onNodeWithTag("thread_count_slider").performMouseInput { click(Offset(1f, 0f)) } onNodeWithTag("thread_count_text").assertTextEquals ("1") onNodeWithTag("thread_count_slider").performMouseInput { click(Offset(240.dp.toPx() - 1f, 0f)) } onNodeWithTag("thread_count_text").assertTextEquals(maxvalue.toString())