遍历recyclerview的item,使用Appium和Robot Framework选择符合条件的item

Posted

技术标签:

【中文标题】遍历recyclerview的item,使用Appium和Robot Framework选择符合条件的item【英文标题】:Iterative through recyclerview's items and select one that matched the condition using Appium and Robot Framework 【发布时间】:2021-11-28 06:08:22 【问题描述】:

我正在使用 Appium 和 Robot Framework 进行自动化测试。我在处理 Recyclerview 中的项目时遇到问题。 recyclerview 的项目是一个自定义视图,它是多个文本视图的组合。我们假设recyclerview的item是这样的

=======================

文本视图A |文本视图B |文本视图C |

=======================

在哪里

    TextViewA 的 id 是“tvA” TextViewB 的 id 是“tvB” TextViewC 的 id 是“tvC”

如果项目符合以下条件,我的目标是编写一个机器人来迭代项目并单击 Textview(三个中的任何一个):

    TextviewA 中的@text 必须等于 $paramA TextviewB 中的@text 必须等于 $paramB TextviewC 中的@text 必须等于 $paramC

我决定做以下事情:

    将 recyclerview 中的所有项目作为列表获取并循环访问这些项目。如何? - 不可能,因为列表是 RecyclerView 如果 1. 不可能,则创建一个 while 循环(for 循环,其中 $i = 0 - 9999)并检查 item[$i] 是否存在。如果item存在,检查TextViews中的@text是否与参数匹配。如果该项目不存在,请向上滚动并再次检查该项目

【问题讨论】:

【参考方案1】:

我不熟悉 appium 或机器人框架,但如果这是一个视觉测试,那么我相信你可以模拟输入,对吧?

我希望测试涵盖的是,给定一个包含项目 A1、A2、A3 的列表,RecyclerView 中有三行,其值绑定到 A1、A2 和 A3 的内容。

您不能像这样迭代 RV 的所有项目,因为回收器视图很好.. 回收视图,因此它不会创建所有视图。它只是使用一个可在您滚动时重复使用的池。

关于您的选项 2

创建一个 while 循环(for 循环,其中 $i = 0 - 9999)并检查 item[$i] 是否存在。如果item存在,检查TextViews中的@text是否与参数匹配。如果该项目不存在,请向上滚动并再次检查该项目

我认为你从错误的角度来处理这个问题。首先,您应该假设回收者视图按设计“按预期工作”。您不需要确保它完成了它应该做的事情,但您确实希望确保如果您给它 5 个项目,这些项目将正确绑定到您期望的内容,并且绑定是正确的。

在 Espresso/android 中,您通常会实例化您的 Activity/Fragment“场景”,并覆盖注入的依赖项(即,例如:您的项目通常来自的数据源),以用更简单/假的替换它们/更快的数据集。

因此,您只需提供一组已知/硬编码的值,而不是在测试期间发出网络请求。

例如:

如果您的 Activity/viewModel 使用存储库来获取此列表,您可以注入一个模拟来返回您在测试中硬编码并且您知道的列表。

所以当活动真正开始时,它会使用这个假存储库。

此时,您就知道屏幕应该是什么样子了。如果你的虚假列表有 10 个项目,那么你的 RecyclerView 应该能够呈现这 10 个项目。

为此,您可以使用以下操作:

onView(withId(R.id.your_recycler_view))
   .perform(actionOnItemAtPosition<YourViewHolder>(0, click()))

例如,“单击”位置 0 处的项目。或者您可以使用许多其他 Espresso 操作、断言、匹配器来确定是否存在某些文本等。

【讨论】:

我错过了!谢谢你提醒我。 如果您曾经使用过Espresso,请记住您有RecyclerViewActions 可以操作 RecyclerView 项目,例如检查特定位置的项目、滚动到项目等。

以上是关于遍历recyclerview的item,使用Appium和Robot Framework选择符合条件的item的主要内容,如果未能解决你的问题,请参考以下文章

如何实现让RecyclerView有不同尺寸的item

安卓recyclerview中的adapter怎么设置item的viewtype

android -------- Data Binding的使用 RecyclerView

如何彻底更改 recyclerview 中的 item 布局中的某个控件的某个属性

RecyclerView的Item的单击事件

Android教程2020 - RecyclerView响应点击