【问题标题】:Xamarin.UITest: Retrieving elements hidden from screenXamarin.UITest:检索隐藏在屏幕上的元素
【发布时间】:2017-03-28 06:45:09
【问题描述】:

我想为我的 Xamarin.iOS 应用程序编写一个 UI 测试,以确保所有 tableview 元素/单元格都存在于屏幕上。我可以使用 app.Query(e => e.All()),但这只会检索当前在屏幕上可见的元素。有没有办法检索所有元素(包括从视图中隐藏的元素)以断言检索到的元素符合预期,而无需启动滚动操作?

非常感谢任何建议。

【问题讨论】:

  • 您是在谈论其可见性设置为 false 的项目还是在相关视图的可视区域中尚未呈现的项目,除非用户滚动视图。
  • 是的,我说的是除非用户向下滚动到下一个“批次”元素,否则项目还没有出现在视图的可视区域中。
  • 大多数 tableviews、listviews、recyclerviews 等在用户实际滚动之前不会创建这些元素。就出于内存和性能原因使用回收器模式的视图而言,屏幕上存在的视图被重新使用,并且仅这些单元格、子视图等中的数据元素被更新,因此单个单元格/子视图确实如此不 存在于数据源中的每个项目中。对数据源中的每个项目进行测试并不是基于 UI 的测试的真正意图...
  • 感谢您的回复。但理想情况下,当新视图被推送到堆栈时,我仍然想验证正确的元素是否按预期存在。

标签: xamarin xamarin.uitest


【解决方案1】:

没有办法直接做到这一点,但有方法可以向下滚动列表视图以获取更多项目,但原始项目将从可视化树中删除。

表格视图使用单元格回收,因此它们只会创建足够的单元格来填满屏幕。当您滚动从顶部滚动的单元格时,将被“回收”并在底部显示新数据。这意味着 screen 的单元格实际上并不存在 - 因此 UI 测试无法访问任何内容。

我过去通过获取项目并缓存一些值、滚动、获取更多项目、滚动等来完成它,并在我进行时建立项目列表。然后一旦不再滚动,检查值。

【讨论】:

  • 感谢您的回复。这是我迄今为止一直在做的方式。只是想知道是否有更直接/更快的方式。对于更大的列表,似乎效率有点低。
  • 更新了我的答案,解释了为什么不可能
  • @JimBobBennett 感谢您的解释。您能否分享您负责滚动列表直到没有更多项目的脚本/部分代码?提前致谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 2022-06-24
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多