Метод performScrollTo
Метод performScrollTo у
SemanticsNodeInteraction
листает прокручиваемый контейнер
к выбранному узлу.
Нужен для
LazyColumn
и длинных списков, где элемент
изначально вне экрана.
После прокрутки вызывают assert.
Синтаксис
composeTestRule.onNodeWithText("abcde").performScrollTo()
Пример
Давайте прокрутим список к последней строке:
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Text
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performScrollTo
import org.junit.Rule
import org.junit.Test
class ScrollToTest {
@get:Rule
val composeTestRule = createComposeRule()
@Test
fun scrollsToTarget() {
val lines = List(30) { if (it == 29) "abcde" else "12345" }
composeTestRule.setContent {
LazyColumn {
items(lines) { line ->
Text(text = line)
}
}
}
composeTestRule.onNodeWithText("abcde").performScrollTo()
composeTestRule.onNodeWithText("abcde").assertIsDisplayed()
}
}
Тест проходит: performScrollTo довёл
до узла с "abcde", assertIsDisplayed успешен.
Пример
Давайте прокрутим к строке по tag внутри списка:
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.assertTextEquals
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performScrollTo
import org.junit.Rule
import org.junit.Test
class ScrollToTagTest {
@get:Rule
val composeTestRule = createComposeRule()
@Test
fun scrollsToTag() {
composeTestRule.setContent {
LazyColumn {
itemsIndexed(List(25) { "12345" }) { index, line ->
Text(
text = if (index == 24) "abcde" else line,
modifier = Modifier.testTag("row-$index"),
)
}
}
}
composeTestRule.onNodeWithTag("row-24").performScrollTo()
composeTestRule.onNodeWithTag("row-24").assertTextEquals("abcde")
}
}
Тест проходит: узел tag "row-24"
прокрутили и текст совпал с "abcde".
Смотрите также
-
функция
LazyColumn,
список в примере -
метод
assertIsDisplayed,
после performScrollTo -
метод
onNodeWithTag,
поиск строки в списке -
класс
SemanticsNodeInteraction,
где объявлен performScrollTo