【问题标题】:How do I access a VStack while UI testing my SwiftUI app在 UI 测试我的 SwiftUI 应用程序时如何访问 VStack
【发布时间】:2020-10-05 02:49:13
【问题描述】:

我有一个VStack,其代码依赖于.onTapGesture 方法。像这样的:

VStack {
    if imageShow {
        Image("image1")
    }
    else {
        Image("image2")
    }
}
.onTapGesture {
    imageShow.toggle()
}

我想使用 XCTest 在 UI 测试中测试此行为。问题是,我不知道如何访问 VStack 以便对其应用.tap()。我似乎找不到附加到app 的方法。使用app.buttons[] 找到了一个按钮,但似乎没有与app.VStackapp.HStack 等效的按钮。

另外,我尝试转换此代码以将 VStack 包装在 Button 中,但由于某种原因,这会覆盖我的图像,从而扭曲了首选行为。

使用我正在使用的完整 VStack 代码 sn-p 进行更新:

VStack(alignment: .leading, spacing: 0) {
    ZStack {
        if self.create_event_vm.everyone_toggle == true {
            Image("loginBackground")
                .resizable()
                .accessibility(identifier: "everyone_toggle_background")
            }
        HStack {
            VStack(alignment: .leading, spacing: 0) {
                Text("Visible to everyone on Hithr")
                    .kerning(0.8)
                    .scaledFont(name: "Gotham Medium", size: 18)                                          .foregroundColor(self.create_event_vm.everyone_toggle ? Color.white : Color.black)
                    .frame(alignment: .leading)

                    Text("Public event")
                        .kerning(0.5)
                        .scaledFont(name: "Gotham Light", size: 16)
                                    .foregroundColor(self.create_event_vm.everyone_toggle ? Color.white : Color.black)
                        .frame(alignment: .leading)
                    }
                    .padding(.leading)
                    Spacer()
                }
            }
        }
        .frame(maxWidth: .infinity, maxHeight: 74)
        .onTapGesture {
            self.create_event_vm.everyone_toggle.toggle()
        }
        .accessibility(identifier: "public_event_toggle")
        .accessibility(addTraits: .isButton)

【问题讨论】:

    标签: swiftui xctest xcuitest


    【解决方案1】:

    试试下面的方法

    VStack {
        if imageShow {
            Image("image1")
        }
        else {
            Image("image2")
        }
    }
    .onTapGesture {
        imageShow.toggle()
    }
    .accessibility(addTraits: .isButton)
    .accessibility(identifier: "customButton")
    

    测试

    XCTAssertTrue(app.buttons["customButton"].exists)
    

    【讨论】:

    • 它给了我以下错误:Failed to get matching snapshot: Multiple matching elements found for。看起来它正在将自己附加到 VStack 中的每个 Text() 视图。
    • 您可以使用 app.buttons["something"].firstMatch 来解决 Multiple matching elements found 错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    相关资源
    最近更新 更多