如何使用 Xcode 7 UI 测试检查表格视图中的单元格是不是可见?

Posted

技术标签:

【中文标题】如何使用 Xcode 7 UI 测试检查表格视图中的单元格是不是可见?【英文标题】:How do I check a cell is visible in a table view with Xcode 7 UI Testing?如何使用 Xcode 7 UI 测试检查表格视图中的单元格是否可见? 【发布时间】:2015-09-03 10:27:42 【问题描述】:

我有一个包含很多单元格的表格视图,但并不是每个单元格都在屏幕上可见。当我检查时

table.cells.staticTexts.matchingIdentifier("My Cell").element.exists

它返回 true,但单元格在屏幕上不可见,我无法点击它。因为每当我点击它时,测试就会失败。

如何检查一个元素是否在屏幕上可见?或者如何点击不可见的元素?

【问题讨论】:

这是我对这个问题的解决方案-希望对***.com/a/33538255/4093106有帮助 【参考方案1】:

使用hittable 属性而不是exists

class reference for XCUIElement 解释说,hittable 属性只有在可以触摸元素时才会返回 true

table.cells.staticTexts.matchingIdentifier("My Cell").element.hittable

【讨论】:

【参考方案2】:

尝试使用 element.hittable,而不是使用 element.exists。这对我有用,如果元素当前处于显示层次结构中,即使它在屏幕视图之外,exists 也会返回 true。只有当元素在屏幕上并且它的可命中元素时,hittable 才会返回 true。

【讨论】:

【参考方案3】:

tableview 方法 cellForRowAtIndexPath (NOT 同名的委托方法)如果当前正在显示将返回某个索引路径的单元格,如果不显示则返回 nil。

如果用户点击一个按钮(或者如果您的单元格中的任何视图发生任何事情),您还可以向上查看视图层次结构以首先找到单元格,然后是表格视图,方法 indexPathForCell 将为您提供单元格的索引路径。

【讨论】:

【参考方案4】:

您可以使用 swipeUp 方法向下滚动,直到特定单元格可见。您还可以检查单元是否存在。像这样的。

XCUIElementQuery *tableQuery = app.tables;
 if (!tablesQuery.cells.staticText[@"some text"].exist)
  [tablesQuery.staticTexts[@"visible cell text"] swipeUp];

【讨论】:

以上是关于如何使用 Xcode 7 UI 测试检查表格视图中的单元格是不是可见?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 在 XCode UI 自动化中选择随机表格视图单元格

在 Xcode ui 测试 Swift 中查找表格单元格

Xcode UI 测试:如何在继续测试之前检查下一个 XCUIElement 是啥

Xcode 7 UI 测试顺序

Xcode 7 UI 测试 XCUIElementQuery 随机未正确更新

在 UI 测试期间,如何使用 Xcode 7 截取我的 UI 截图?