我正在为连续几个系统警报进行UI测试(即获得摄像头,麦克风和照片许可的视频应用)。对于示例项目,似乎新方法addUIInterruptionMonitorWithDescription
不适用于横向模式。
我遇到过这篇文章Swift UI Test - User Notifications System Alert,但案例对我来说有所不同。
我的代码如下所示:
let desc = "\u{201c}Alert\u{201d} Would Like to Access the Camera"
let app = XCUIApplication()
addUIInterruptionMonitorWithDescription(desc) { (alert) -> Bool in
let okButton = alert.buttons["OK"]
print(okButton.frame)
okButton.tap()
return true
}
app.buttons["Alert"].tap()
适用于肖像,而非风景。案例可以通过模拟器和设备重现。
此外,我在Portrait中获得的okButton.frame
是
CGRect
▿ origin : CGPoint
- x : 207.0
- y : 387.666666666667
▿ size : CGSize
- width : 135.0
- height : 44.0
但横向中的框架显示如下
CGRect
▿ origin : CGPoint
- x : 143.333333333333
- y : 368.0
▿ size : CGSize
- width : 44.0
- height : 135.0
我得到的测试失败错误就是这个
测试失败: - [AlertUITests testExample()]失败:UI测试失败 - 无法滚动到可见(通过AX操作)按钮0x14df73840:特征:8589934593,{{277.0,345.0},{46.0,30.0}}, label:'Button',错误:执行AXAction 2003的错误-25204
有什么想法吗?
编辑1
提交至Radar rdar:// 23931990
答案 0 :(得分:0)
这是一个框架错误。
尝试使用以下内容:
助手:
var device: XCUIDevice {return XCUIDevice.shared()}
extension XCUIDevice {
func type() -> String {
if XCUIApplication().windows.element(boundBy: 0).horizontalSizeClass == .compact || XCUIApplication().windows.element(boundBy: 0).verticalSizeClass == .compact {
return "iPhone"
} else {
return "iPad"
}
}
}
方法:
func handleOrientation(_ orientationAltered: Bool) -> Bool {
guard device.type() == "iPad" else {return false}
if !orientationAltered && device.orientation == .landscapeLeft {
device.orientation = .portrait
return true
} else if orientationAltered && (device.orientation == .landscapeLeft || device.orientation == .landscapeRight) {
device.orientation = .landscapeLeft
return false
} else {return false}
}