I'm implementing some instrumented tests using the Jetpack Compose testing library. I'm not too familiar with Kotlin / Android development yet, but I have years of experience with Selenium and other testing libraries, so I'm missing some basic things and have no idea how to implement them.
What I want to do:
- Iterate over an element (node) list. I have this list an all items are identified by the same test tag "item". I need to click on each one of these items.
On Selenium I can easily do that:
elements = driver.find_elements("item")
elements.each do |element|
element.click
end
But on Kotlin with the Composing Testing Framework I have no clue how to do that. The method below (responsible for returning a list of nodes) doesn't support forEach
:
composeTestRule.onAllNodes(hasTestTag("item")
- I also want to retrieve the list size.
On Selenium the method below returns the qty of items found:
driver.find_elements("item").size
But, again, there's nothing like that available with composing:
composeTestRule.onAllNodes(hasTestTag("item")
I've already read the official JetPack Compose Testing Tutorial, but it doesn't provide much details
I'm not sure how you'd go about iterating over a SemanticsNodeInteractionCollection. I'm also uncertain of why you'd want to do that. That said, in a testing scenario you'd likely have an expected count of items in a collection. Therefore, you can create a range and get the SemanticsNodeInteraction for each element that .OnAllNodes() returns.
Example where I expect there to be 10 ui elements returned:
Asserting the count equals something can also be done through:
If you just want to get the total count and not assert it. I'd argue there might be something wrong with the tests themselves. I'd expect your test to be a controlled environment where you know exactly how many items should be shown on the screen at any given time.
Let me know if this helps, otherwise please elaborate on your exact scenario.