XCUItest系统警报

时间:2018-02-19 15:48:39

标签: cucumber xctest xctestcase xcuitest

我正在尝试使用XCUITest和Cucumberish自动化我的应用程序,我无法点击系统提醒,例如位置和联系人的权限,但我无法点击"允许"或者"好的",它点击"不允许"或者"允许"任意&#34 ;.

这是我在我的步骤定义中尝试使用的代码:

systemAlertMonitorToken = addUIInterruptionMonitor(withDescription: "Location Dialog") { (alert) -> Bool in
        if alert.buttons.matching(identifier: "Allow").count > 0 {
            alert.buttons["Allow"].tap()
            return true
        }
        else if alert.buttons.matching(identifier: "OK").count > 0{
            alert.buttons["OK"].tap()
            return true
        }
        else {
            return false
        }
    }

2 个答案:

答案 0 :(得分:1)

我使用以下代码在我的应用中点击权限屏幕:

 let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard")

 let allowBtn = springboard.buttons[identifier]

 if allowBtn.waitForExistence(timeout: 4) {
      allowBtn.tap()
 }

[标识符]为“允许”或“不允许”或您选择的任何选项。

答案 1 :(得分:0)

我怀疑使用match(identifier:“ Allow”)。count存在问题。也许Xcode认为“ Dont Allow”和“ Allow”按钮是相同的XCUIElement。

如果您知道“允许”和“确定”按钮将始终位于相同的boundBy位置,则可以按该位置点按该按钮。我只需要检查按钮的存在,然后根据按钮的boundBy数字点击按钮即可。

例如,如果警报具有2个按钮,则左侧按钮显示“允许”,而右侧按钮显示“不允许”,代码如下:

systemAlertMonitorToken = addUIInterruptionMonitor(withDescription: "Location Dialog") { (alert) -> Bool in
    if alert.buttons["Allow"].exists || alert.buttons["OK"].exists {
        alert.buttons.element(boundBy: 1).tap()
        return true
    }
    else {
        return false
    }
}