我正在为我的项目编写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
}
如果警报到来,上述代码适用于两者。
答案 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()