屏幕外表格视图标题未出现在 XCUI 测试视图层次结构中

问题描述 投票:0回答:4

我有一个带有自定义视图的 UITableview,它出现在

viewForHeaderInSection
委托方法中。运行应用程序时,它显示并运行良好。

在进行 UITests 时,我注意到这个自定义视图标识符不会出现在视图层次结构中(除非它们在屏幕上或几乎在屏幕上)。因此,我无法在表格视图中进一步显示 UITest 标头。

我几年前发现了这篇文章https://tiyachows.medium.com/xcuitest-and-its-nuances-3db6fac6f5dc它说

如果标题元素位于屏幕外,然后滚动到视图中。应用程序层次结构不会使用该标头的 id 进行刷新,并且 UI 测试将无法访问该元素。

这并没有让我相信我能够对我的标题进行 UITest。

这是一个已知问题吗?除了手动滚动到标题之外,还有其他已知的解决方法吗?

ios swift uitableview xcuitest
4个回答
0
投票

这本身并不是一个需要解决的问题。据我所知,在开发移动应用程序时,不要加载可以在应用程序页面上显示的所有元素以节省内存,这是一个很好的做法。由于您正在进行 UI 测试,因此您应该尝试模拟真实用户对交互的操作 - 在这种情况下,如果该元素位于屏幕外,建议您滚动到它。想象一下,页面由于某种原因无法滚动 - 如果您能够直接与屏幕外的元素交互并验证元素,则测试永远不会发现这一点。


0
投票

您需要手动滚动到它们。使用标准表格时,XCUITest 足够智能,可以滚动到尚不可见的项目,但是一旦您进行自定义,您将需要自定义您的操作。

我建议使用

scrollTo(label: String, maxScrolls: Int)
功能。如果你看到这个东西,你就完成了!如果不这样做,请再次滚动,除非您达到了最大阈值(如果表中根本不存在某些内容,您不想永远滚动)。

如果您在到达物品后点击,您应该知道这可能是不稳定的;根据滚动速度和屏幕尺寸,您可能会遇到屏幕上“几乎没有”某些内容的情况,导致 XCUITest 可以看到它,但还无法点击(几乎没有出现在屏幕上)。为了解决这种情况,我在尝试之前检查是否有东西可点击。如果不是(并且已经通过了可见检查),我将执行一个非常非常小的滚动。如果您不点击,请忽略本段。


0
投票

解决方案是执行以下操作:

制作自定义滑动功能(扩展)->这是必需的,因为苹果经常更改其滑动功能的大小,否则会弄乱自定义滚动功能。它可以选择沿以下任意方向滚动:.up、.down、.right、.left -> 尽管 .down 应该是默认值。
  1. 创建一个
  2. scrollsIntoView
  3. 函数(扩展)。
    for _ in 0...maxSwipes
    ,然后检查项目是否存在&& isHittable。如果没有,请继续滚动并
    swipeCount += 1
    。如果是,则返回 true。如果我们在 maxSwipes 中没有找到该元素,则返回 false。返回一个布尔值可以让你检查是否只需要几次滑动就可以看到某些东西,如果不存在则转向不同的操作,而不会导致测试失败。但您也可以直接在测试用例中针对 bool 值进行断言。
    如果您想获得更高级的知识,您可以考虑scrollDomain,它基本上是我们滚动的应用程序区域。这对于轮播或其他东西中的水平滚动很有帮助。
  4. 还值得指出的是,滑动方向与滚动方向相反。

祝你好运!


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.