1

我正在尝试使用 XCUITest 和 Cucumberish 自动化我的应用程序,我无法单击系统警报,例如位置和联系人权限,但无法单击“允许”或“确定”,它正在单击“不允许”或“任意”“允许”。

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

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
    }
  }
4

2 回答 2

4

我使用此代码在我的应用程序中点击权限屏幕:

let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard")
            
let allowBtn = springboard.buttons[identifier]
            
if allowBtn.waitForExistence(timeout: 4) {
    allowBtn.tap()
}

[identifier]“允许”或“不允许”或您选择的任何选项在哪里。

于 2019-02-28T06:59:43.803 回答
0

我怀疑使用匹配(标识符:“允许”).count 存在问题。也许 Xcode 认为“不允许”和“允许”按钮是同一个 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
    }
}
于 2020-01-24T21:05:08.570 回答