【问题标题】: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,但单元格在屏幕上不可见,我无法点击它。因为每当我点击它时,测试就会失败。
如何检查一个元素是否在屏幕上可见?或者如何点击不可见的元素?
【问题讨论】:
标签:
ios
xcode
uitableview
xcode7
xcode-ui-testing
【解决方案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];
}