处理位置服务警报的 UITest 用例
UITest cases to handle with location services alert
我正在为我的项目编写 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
}
无论警报是否出现,以上代码都适用。
使用中断监视器是正确的方法。但是,在与警报交互之前检查显示的警报是否是您期望的警报会更安全:
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
}
我使用以下代码允许用户定位:
// 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 中点击一个单元格。然后,我需要在我的主视图控制器中显示它,所以我关闭了我的视图控制器,我希望得到相同的标题。
编码愉快!
试试这个
let app2 = XCUIApplication(bundleIdentifier: "com.apple.springboard")
let button = app2.alerts.firstMatch.buttons["Allow While Using App"]
button.waitForExistence(timeout: 10)
button.tap()
我正在为我的项目编写 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
}
无论警报是否出现,以上代码都适用。
使用中断监视器是正确的方法。但是,在与警报交互之前检查显示的警报是否是您期望的警报会更安全:
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
}
我使用以下代码允许用户定位:
// 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 中点击一个单元格。然后,我需要在我的主视图控制器中显示它,所以我关闭了我的视图控制器,我希望得到相同的标题。
编码愉快!
试试这个
let app2 = XCUIApplication(bundleIdentifier: "com.apple.springboard")
let button = app2.alerts.firstMatch.buttons["Allow While Using App"]
button.waitForExistence(timeout: 10)
button.tap()