Swift 如何在iOS 12中的XUITest中解除系统授权警报

Swift 如何在iOS 12中的XUITest中解除系统授权警报,swift,ios12,xcuitest,Swift,Ios12,Xcuitest,我仍然无法在XSuite测试中对系统警报做出反应,如“照片库授权请求”。我尝试了以下代码片段。但它们都不起作用。有什么想法吗 用户界面中断监视器 addUIInterruptionMonitor(带说明:“系统警报”){(警报)->Bool-in 如果存在警报按钮[“确定”]{ 警报。按钮[“确定”]。点击() } 返回真值 } xguiapplication().sheets.buttons[“Aufnahme”].firstMatch.tap() 等待NSPredicate XCUIApp

我仍然无法在XSuite测试中对系统警报做出反应,如“照片库授权请求”。我尝试了以下代码片段。但它们都不起作用。有什么想法吗

用户界面中断监视器

addUIInterruptionMonitor(带说明:“系统警报”){(警报)->Bool-in
如果存在警报按钮[“确定”]{
警报。按钮[“确定”]。点击()
}
返回真值
}
xguiapplication().sheets.buttons[“Aufnahme”].firstMatch.tap()
等待NSPredicate

XCUIApplication().sheets.buttons[“Aufnahme”].firstMatch.tap()
让existsprediate=NSPredicate(格式:“exists==true”)
let expectation=XCTNSPredicateExpectation(谓词:existsPredicate,对象:app.alerts.firstMatch)
让结果=XCTWaiter.wait(for:[期望],超时:超时)
如果结果==。已完成{
app.alerts.firstMatch.tap()
}否则{
打印(“超时”)
}
等待存在

XCUIApplication().sheets.buttons[“Aufnahme”].firstMatch.tap()
app.alerts.firstMatch.waitForExistence(超时:10)
斜板解决方案

此解决方案基于来自的帖子。它的工作原理一般,但似乎相当缓慢(见我下面的日志)。在t=14.51s时,我点击按钮“打开照片库”。然后系统警报直接出现在我的应用程序中。但随后一切似乎都冻结了约70秒。 在t=78.08时,调用
setPermission()
函数

有人经历过类似的行为吗

###打开照片库
t=14.51s点击“Aufnahmen”按钮
t=14.51s等待bone.self.TargetShooter空闲
t=14.56s找到“Aufnahmen”按钮
t=14.62s检查影响“Aufnahmen”按钮的中断元件
t=14.84s综合事件
t=14.98s等待bone.self.TargetShooter空闲
t=75.08s未收到应用程序动画完成通知,将尝试继续。
###启动编写过程
t=75.08s获取:子体匹配类型警报的匹配数
t=75.12s pid为13439的应用程序的快照可访问性层次结构
t=75.16s查找:匹配类型警报的子体
###允许系统警报
t=75.16s找到警报
t=pid为13439的应用程序的75.16s快照可访问性层次结构
t=75.23s查找:子体匹配类型警报
t=75.23s查找:索引0处的元素
t=75.23s获取:子体匹配类型按钮的匹配数
t=75.29s pid为13439的应用程序的快照可访问性层次结构
t=75.33s查找:匹配类型警报的子体
t=75.33s查找:索引0处的元素
t=75.33s查找:匹配类型按钮
t=75.33s检查“按钮”是否存在`
t=75.33s pid为13439的应用程序的快照可访问性层次结构
t=75.39s查找:匹配类型警报的子体
t=75.39s查找:索引0处的元素
t=75.39s查找:匹配类型按钮
t=75.39s查找:索引1处的元素
t=75.39s找到按钮
t=75.39s pid为13439的应用程序的快照可访问性层次结构
t=75.45s查找:匹配类型警报的子体
t=75.45s查找:索引0处的元素
t=75.45s查找:子体匹配类型按钮
t=75.45s查找:索引1处的元素
t=75.59s点击“确定”按钮
t=75.59s等待com.apple.springboard空闲
t=75.65s找到“确定”按钮
t=75.65s pid为13439的应用程序的快照可访问性层次结构
t=75.72s查找:匹配类型警报的子体
t=75.72s查找:索引0处的元素
t=75.72s查找:子体匹配类型按钮
t=75.72s查找:索引1处的元素
t=75.83s检查影响“OK”按钮的中断元件
t=75.88s pid为13439的应用程序的快照可访问性层次结构
t=75.93s查找:子体匹配类型警报
t=75.98s综合事件
t=76.13s等待com.apple.springboard空闲
###结束编写过程

这就是它在我的代码中的工作原理,请尝试:

var photoAccessGranted = XCTestExpectation(description: "photo access")


addUIInterruptionMonitor(withDescription: "system permissions") { (alert) -> Bool in
        print("1) addUIInterruptionMonitor:\(alert)")

        if alert.staticTexts["Put here the text that you get in the alert"].exists { // Photo permission
            alert.buttons["OK"].tap()
            self.photoAccessGranted.fulfill()
        }

这就是它在我的代码中的工作方式,请尝试:

var photoAccessGranted = XCTestExpectation(description: "photo access")


addUIInterruptionMonitor(withDescription: "system permissions") { (alert) -> Bool in
        print("1) addUIInterruptionMonitor:\(alert)")

        if alert.staticTexts["Put here the text that you get in the alert"].exists { // Photo permission
            alert.buttons["OK"].tap()
            self.photoAccessGranted.fulfill()
        }