SwiftKickMobile/SwiftMessages

SwiftUI Accessibility for UI Testing

開放

#568 建立於 2024年12月11日

 (3 則留言) (0 個反應) (0 位負責人)Swift (754 個分叉)batch import
help wanted

倉庫指標

星標
 (7,449 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

I'm attempting to set accessibility for a SwiftUI view that is presented within a hosting view controller that SwiftMessages presents. I attempted conforming to AccessibleMessage and setting the UIHostingController to the accessibleElement property. This did not seem to work as the Appium inspector that we're using still does not see the buttons within the SwiftUI View. Any tips on getting accessibillity to work with SwiftUI?

SwiftUI container UIView

class PopUpContainerView<T: View>: UIView, AccessibleMessage {
    // Accessibility for E2E testing
    var accessibilityMessage: String?
    var accessibilityElement: NSObject?
    var additonalAccessibilityElements: [NSObject]?

    let uiContainerView: UIHostingController<T>

    init(content: T, cornerRadius: CGFloat = 15, padding: CGFloat = 24) {
        uiContainerView = UIHostingController(rootView: content)
        super.init(frame: .zero)
        addSubview(uiContainerView.view)
        uiContainerView.view.layer.cornerRadius = cornerRadius
        uiContainerView.view.pinSuperview(horizontalPadding: padding)

        accessibilityElement = uiContainerView
    }

    @available(*, unavailable)
    required init(coder _: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

which is presented like this:

let view = PopUpContainerView(
    content: MySwiftUIView(onExit: {
        SwiftMessages.hide()
    }, onProceed: {
        SwiftMessages.hide()
        // do something
    }),
    cornerRadius: 12
)
var config = SwiftMessages.Config()
config.duration = .forever
config.presentationStyle = .center
config.dimMode = .gray(interactive: true)
SwiftMessages.show(config: config, view: view)

貢獻者指南