如何从 UI 测试用例类访问 SwiftUI 视图的属性?

Posted

技术标签:

【中文标题】如何从 UI 测试用例类访问 SwiftUI 视图的属性?【英文标题】:How to access a SwiftUI view's property from a UI Test case class? 【发布时间】:2019-12-08 17:26:52 【问题描述】:

我正在编写 UI 测试,我需要访问视图的 @State 属性,只要该视图内的按钮即可。

struct CircleImage: View 

    @State var imageName: String = ""

    var body: some View 
        // ...
        Button(action: ) 
        .accessibility(identifier: "myButton")
    

我很容易通过let myButton = app.buttons["myButton"] 获得按钮。但出于测试目的,我还需要访问 imageName 属性。我尝试在 ContentView 中添加 CircleImage().accessibility(identifier: "circleImageView"),但它会覆盖 CircleImage 视图(包括按钮)内的所有可访问性(标识符:)。

【问题讨论】:

我不完全确定,但我认为这可以帮助你...github.com/nalexn/ViewInspector 【参考方案1】:

UI 测试不测试内部状态。他们只测试 UI 可见的行为。要针对这种类型编写 UI 测试,imageName 应该会产生一些行为,然后您测试该行为是否可见。在这种情况下,您可以将 imageName 转换为可访问性标签,这将允许 VoiceOver 读取它(顺便还允许 UI 测试访问它)。

The best way to make an app UI-testable is to first make it accessible. 使用 VoiceOver 试用您的应用。如果它在那里运行良好,那么它很可能也适用于 UI 测试。

【讨论】:

以上是关于如何从 UI 测试用例类访问 SwiftUI 视图的属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义测试用例向导生成的 DUnit 测试用例类?

计时器经过后,SwiftUI 应用程序的 UI 测试未找到设置了可访问性标识符的元素

如何通过单击按钮在 Swift UI 中从一个视图导航到另一个视图

Python3-unittest测试框架之测试用例类

基于外部单例类中的属性的 SwiftUI 显示表

使用 XCTestCases 类中的可访问性标识符访问 NavigationLink - SwiftUI