如何使用 XCUITest 查询 SwiftUI 表格单元格
Posted
技术标签:
【中文标题】如何使用 XCUITest 查询 SwiftUI 表格单元格【英文标题】:How does one query SwiftUI table cells using XCUITest 【发布时间】:2021-09-08 18:23:06 【问题描述】:我开始在我的 UIKit 项目中包含一些 SwiftUI 代码。 UIKit 项目使用XCUITest
进行 UI 测试,您可能知道,它可以查询 UI 树下的元素,甚至可以使用标识符来缩小找到的元素范围。
我已将所有可访问性标识符、提示、标签和值移至 SwiftUI 组件。
就我而言,我有一个 UITableView
,现在是一个 SwiftUI List
。在我的 UI 测试中,我会像这样查询UITableView
:
let app = XCUIApplication()
let tableCells = app.table.cells["MyCellIdentifier"]
然而,虽然这在 SwiftUI 中有效,但在 SwiftUI 的 List
中不再有效。我知道 SwiftUI 几乎隐藏了更多关于它如何构建其 UI 的实现细节,它甚至可能不是一个表视图,但它的外观和行为确实像我之前使用的 UITableView
。
有谁知道如何在 SwiftUI 中使用 XCUITest
正确测试表格视图(列表),或者为什么它不适用于现有的测试代码?
如下所示,示例代码显示我向RowView
添加了一个可访问性标识符,但对于可访问性,它被传递到Text
视图(可访问性树中的StaticText
)。
【问题讨论】:
这听起来不对。查询使用 SwiftUI 构建的表格或单元格应该没有区别。你的debugDescription
显示了什么?
@MikeCollins,好主意!我没有想过要尝试,所以我就这样做了。不过这很奇怪。根据我如何组合元素,它似乎产生了与我所期望的不同的东西。例如,我在“单元格”中的两个文本标签具有单独的可访问性标识符,但是它们被删除,因为它包含的 VStack 使用.accessibilityElement(children: .combine)
。此外,似乎没有办法将标识符添加到容器单元格,它总是转到其类型为“其他”的直接子代。
您能否通过获取otherElement
的父级staticText
s 来识别您的单元格?
【参考方案1】:
SwiftUI
中有一个修饰符:
func accessibilityIdentifier(_ identifier: String) -> ModifiedContent<Self, AccessibilityAttachmentModifier>
如果你像这样将它添加到你的 View
元素中:
.accessibility(identifier: ["MyCellIdentifier")
它将暴露给XCUITest
s
【讨论】:
我忘了提到相同的标志已移至 SwiftUI 代码。我的问题是,即使不使用 SwiftUI 中的标志,像let tableCells = app.table.cells
这样的通用查询似乎也不起作用。以上是关于如何使用 XCUITest 查询 SwiftUI 表格单元格的主要内容,如果未能解决你的问题,请参考以下文章
在 SwiftUI 中的 ActionSheet 上设置辅助功能标识符
XCUITest - 如何在应用程序运行时禁用 Wi Fi?