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