处理位置服务警报的UITest案例

时间:2018-01-24 07:18:50

标签: ios xcode xctest xcode-ui-testing ui-testing

我正在为我的项目编写UI测试用例。

我的项目流程如下:

  • 登录屏幕。用户输入凭据并按登录。
  • 主屏幕。对于用户的许可,存在位置要求。我允许它。
  • 注销。

因此,当我全新安装应用程序时,此流程将记录在测试用例中,如果我执行新的构建,则可以正常工作。

但问题是,当我在旧版本上进行测试时,没有对位置权限的警报,并且测试失败。 我每次运行测试时如何处理此情况或询问用户是否允许?

要重置用户凭据,我将launchArguments传递给XCUIApplication()并在AppDelegate中处理。

我已经实现了代码让我知道它的正确方法

addUIInterruptionMonitor(withDescription: "Allow “APP” to access your location?") { (alert) -> Bool in
            alert.buttons["Only While Using the App"].tap()

            return true
        }

如果警报到来,上述代码适用于两者。

3 个答案:

答案 0 :(得分:3)

使用中断监视器是正确的方法。但是,在与警报交互之前,检查显示的警报是否是您期望的警报更安全:

addUIInterruptionMonitor(withDescription: "Allow “APP” to access your location?") { (alert) -> Bool in
    let button = alert.buttons["Only While Using the App"]
    if button.exists {
        button.tap()
        return true // The alert was handled
    }

    return false // The alert was not handled
}

答案 1 :(得分:0)

我使用以下代码来允许用户的位置:

    // MARK: - Setup
    
    override func setUp() {
        super.setUp()
        continueAfterFailure = false
        app = XCUIApplication()
        app.launch()
        addUIInterruptionMonitor(withDescription: "System Dialog") { (alert) -> Bool in
            alert.buttons["Allow Once"].tap()
            return true
        }
    }

在这个设置中,我“注册”了点击允许按钮的中断监视器,所以在这种情况下我可以关闭该模式。现在,这是我的测试:

    // MARK: - Test change mall
    
    func testChangeMall() {
        let selectorChangeButton = app.buttons["change_mall_button"]
        XCTAssert(selectorChangeButton.exists, "Selector change button does not exist")
        selectorChangeButton.tap()
        app.navigationBars.firstMatch.tap()
        let cell = app.staticTexts["Shopping Centre"]
        XCTAssert(cell.exists, "There's no cell with this title")
        cell.tap()
        sleep(1)
        let label = app.staticTexts["Shopping Centre"]
        XCTAssert(label.exists, "Nothing changes")
    }

在这个测试中,我只需转到一个带有按位置排序的列表的视图控制器。首先,我需要关闭该位置的系统警报。因此,首先我关闭该模式,然后从 TableView 中点击一个单元格。然后,我需要在我的主视图控制器中显示它,所以我关闭了我的视图控制器并且我希望有相同的标题。

快乐编码!

答案 2 :(得分:0)

试试这个

    let app2 = XCUIApplication(bundleIdentifier: "com.apple.springboard")
    let button = app2.alerts.firstMatch.buttons["Allow While Using App"]
    button.waitForExistence(timeout: 10)
    button.tap()