XCTest 如何在 OS 设置中切换通知开关?

XCTest how to toggle Notification Switch in OS Settings?

我正在尝试为我正在测试的应用程序启用/禁用 OS 通知开关,但我无法做到。我已经到达设置 > 通知 > 应用程序屏幕本身,但开关似乎没有我可以与之交互的按钮。

这是我得到的结果:

let settingsApp = XCUIApplication(bundleIdentifier: "com.apple.Preferences")
        settingsApp.launch()
        
settingsApp.tables.cells.staticTexts["Notifications"].tap()
settingsApp.tables.cells.staticTexts["app_name"].tap()

到目前为止一切顺利,但此处返回的按钮列表如下:

Failed to get matching snapshot: No matches found for Element at index 7 from input {(
    Button,
    Button, identifier: 'Lock Screen', Selected,
    Button, identifier: 'Notification Center',
    Button, identifier: 'Banners',
    Button, Disabled,
    Button, Disabled
)}

我试过 settingsApp.buttons.element(boundBy: 0).tap() 但最终变成了后退按钮,而 boundBy: 1 最终变成了 'Lock Screen' 按钮。

'Allow Notifications' 开关是否不可点击? :)

Allow Notifications 是一个 switch,它将响应 tap()。以下应该可以解决问题:

settingsApp.tables.cells.switches["Allow Notifications"].tap()

我通常将开关点击包装在一个切换功能中,该功能采用预期状态,并且仅在尚未处于该状态时才点击。