【发布时间】:2015-12-03 13:52:40
【问题描述】:
我正在使用 UITableViews,我想找到与单元格内的控件或静态文本相对应的单元格。
更一般地说,找到给定元素的任何父级或兄弟级的好方法是很高兴知道。
现在我只是循环遍历单元格,直到找到正确的单元格,我想避免这种情况。我试过使用app.tables.cells.containingPredicate,但没有任何运气。
let pred = NSPredicate { (element, bindings: [String : AnyObject]?) -> Bool in
return element.staticTexts["My Text"].exists
}
let cells = app.tables.cells.containingPredicate(pred)
传递给谓词块的元素是一个没有静态文本的 XCElementSnapshot。
编辑
James 是正确的,containingType:identifier: 方法效果很好。
在swift中,它看起来像这样
let cell = app.tables.cells.containingType(.StaticText, identifier: "My Text")
方法签名中的标识符与元素的标识符属性不对应,而只是通过括号中的文本访问元素的常规方式。
app.cells.staticTexts["My Text"]
【问题讨论】:
-
我仍然对为什么
app.cells.staticTexts["My Text"]不适合你感到困惑。如果字符串“My Text”属于任何单元格,则应用的可访问性层次结构的快照会找到该字符串并与之匹配。containingType:identifier:方法会创建一个XCUIElementQuery,这并不意味着此查询中的XCUIElement确实存在于您的应用中。 -
app.cells.staticTexts[] 会给我一个静态文本,即 UILabel,而我需要 UITableViewCell,而不是标签
-
我明白了。如果我错了,请纠正我,但执行
let cell = app.tables.cells.containingType(.StaticText, identifier: "My Text")是创建一个 XCUIElementQuery,而不是 XCUIElement,因此您实际上并没有在应用程序中实例化一个元素,只是创建一个对甚至可能不存在的元素的查询。如果在控制台上执行po app.tables.cells.containingType(.StaticText, identifier: "blah blah"),即使它不存在,它也将始终返回一个对象,并且您无法在 XCUIElementQuery 上运行任何断言,甚至无法运行 .exist 或 .hittable 方法来查看您的元素是否真实. -
@FranciscoJ.Mejias 您可以使用
.element获取查询的元素,然后对其进行断言 -
知道了,所以你正在做
app.tables.cells.containingType(.StaticText, identifier: "My Text").element.exists例如。感谢您帮助我理解 =)
标签: ios swift swift2 xcode-ui-testing