在iOS UITesting中获取一个包含另一个带有静态文本的元素的元素

Posted

技术标签:

【中文标题】在iOS UITesting中获取一个包含另一个带有静态文本的元素的元素【英文标题】:Get an element that contains another element with a static text in iOS UITesting 【发布时间】:2018-02-16 15:03:19 【问题描述】:

如何构建查询以通过静态文本获取包含另一个元素的元素。

示例:获取第一个包含带有文本“cool cell”标签的表格单元格

我需要它,因为我有不同的单元格,我想获得一个包含特定文本的单元格。请注意,我有兴趣获取该单元格,因为我需要确保该单元格包含其他元素。目标是确保标题为“I'm a cell”的单元格也有一个带有文本“cool”的标签

【问题讨论】:

您可能需要对视图的子视图执行循环并检查其类型,让我们说它是否包含 UITextFields 或标签或按钮或 textViews,并且它们有任何文本,将此文本和 UIObject 添加到数组中并返回。 【参考方案1】:

获取第一个包含带有文本“cool cell”标签的表格单元格

怎么样:

let app = XCUIApplication()
app.cells.containing(.staticText, identifier: "cool cell")

如果这还不够,还有一个 containing 的版本需要 NSPredicate

func containing(_ predicate: NSPredicate) -> XCUIElementQuery
func containing(_ elementType: XCUIElement.ElementType, identifier: String?) -> XCUIElementQuery

文档:

返回一个新查询以查找包含符合规范的后代的元素”,这是您所需要的。[...]

【讨论】:

【参考方案2】:

如果您对测试感兴趣 或许this library可以帮到你。

【讨论】:

感谢您的建议,但我想减少项目的依赖并使用本机测试类。【参考方案3】:

如果您不想使用外部库,是否有任何东西阻止您添加新的 UI 测试目标并实现一个测试类,您可以在其中创建一个虚拟数据源并初始化一个单元格数组(由 nib 制成)和然后在那里验证它们?

【讨论】:

以上是关于在iOS UITesting中获取一个包含另一个带有静态文本的元素的元素的主要内容,如果未能解决你的问题,请参考以下文章

iOS UITesting 如何关闭弹出框(iPad 弹出框不提醒样式)

在 XCTest (UITesting) 中获取设备名称

Xcode Bots 从单个 Xcode 服务器在多个 iOS 项目上运行 UITesting

iOS UITesting 错误

Xamarin.iOS UITesting - UnauthorizedAccessException

使用我的服务器时的 Xcode UITesting