kotlin 如何在Android Jetpack编写UI测试中迭代元素(节点)列表?

okxuctiv  于 2022-12-27  发布在  Kotlin
关注(0)|答案(1)|浏览(111)

我正在使用Jetpack Compose测试库实现一些插桩测试,我对Kotlin/Android开发还不是很熟悉,但我有多年使用Selenium和其他测试库的经验,所以我错过了一些基本的东西,不知道如何实现它们。
我想做的是:
1.迭代一个元素(节点)列表。我有这个列表,所有的项目都由相同的测试标签"项目"标识。我需要点击这些项目中的每一个。
在Selenium上,我可以很容易地做到这一点:

elements = driver.find_elements("item")
elements.each do |element|
  element.click
end

但是在Kotlin的Composing Testing Framework上,我不知道该怎么做。下面的方法(负责返回节点列表)不支持forEach

composeTestRule.onAllNodes(hasTestTag("item")

1.我还想检索列表大小。
在Selenium上,下面的方法返回找到的项目数量:

driver.find_elements("item").size

但是,同样,作曲也没有类似的功能:

composeTestRule.onAllNodes(hasTestTag("item")

我已经阅读了official JetPack组合测试教程,但它没有提供太多细节

2q5ifsrm

2q5ifsrm1#

我不确定你会如何迭代SemanticsNodeInteractionCollection。我也不确定你为什么要这样做。也就是说,在测试场景中,你可能会在集合中有一个预期的项目计数。因此,你可以创建一个范围,并为.OnAllNodes()返回的每个元素获取SemanticsNodeInteraction。
我希望返回10个ui元素的示例:

val nodes = composeTestRule.onAllNodes(hasTestTag("item"))
        for (index in 0..10) {
            val node = nodes[index]
            // node.assert whatever you want here.
        }

Assert计数等于某个值也可以通过以下方式实现:

composeTestRule.onAllNodes(hasTestTag("item")).assertCountEquals(10)

如果你只是想得到总数而不是Assert它,我认为测试本身可能有问题,我希望你的测试是一个可控的环境,你可以确切地知道在任何给定的时间屏幕上应该显示多少项。
让我知道这是否有帮助,否则请详细说明您的确切情况。

相关问题