我有一个包含很多单元格的表格视图,并不是每个单元格都在屏幕上可见。当我检查时
table.cells.staticTexts.matchingIdentifier("My Cell").element.exists
它返回 true,但单元格在屏幕上不可见,我无法点击它。因为每当我点击它时,测试都会失败。
如何检查元素是否在屏幕上可见?或者如何点击不可见的元素?
我有一个包含很多单元格的表格视图,并不是每个单元格都在屏幕上可见。当我检查时
table.cells.staticTexts.matchingIdentifier("My Cell").element.exists
它返回 true,但单元格在屏幕上不可见,我无法点击它。因为每当我点击它时,测试都会失败。
如何检查元素是否在屏幕上可见?或者如何点击不可见的元素?
使用hittable
属性而不是exists
.
XCUIElement的类参考解释说,只有可以触摸元素时,该hittable
属性才会返回。true
table.cells.staticTexts.matchingIdentifier("My Cell").element.hittable
而不是使用 element.exists 尝试使用 element.hittable。这对我有用,如果元素当前处于显示层次结构中,即使它在屏幕视图之外,exists 也会返回 true。只有当元素在屏幕上并且它的可命中时,hittable 才会返回 true。
如果当前正在显示, tableview 方法 cellForRowAtIndexPath(不是同名的委托方法)将返回某个索引路径的单元格,如果未显示,则返回 nil。
如果用户单击一个按钮(或者如果您的单元格中的任何视图发生任何事情),您还可以向上查看视图层次结构以首先找到单元格,然后是表格视图,并且方法 indexPathForCell 将为您提供索引路径细胞。
您可以使用 swipeUp 方法向下滚动,直到特定单元格可见。您还可以检查单元是否存在。像这样的东西。
XCUIElementQuery *tableQuery = app.tables;
if (!tablesQuery.cells.staticText[@"some text"].exist){
[tablesQuery.staticTexts[@"visible cell text"] swipeUp];
}