我正在使用Xcode7 / iOS 9中引入的XCUIApplication,XCUIElement和XCUIElementQuery为我的一个应用程序编写UI测试用例。
我打了一个路障。测试用例中的一个屏幕需要iOS的定位服务。如预期的那样,用户被提示是否允许使用带有警报的位置服务:标题为“允许”应用名称“在您使用应用程序时访问您的位置?允许&不允许按钮
问题是,由于警报由操作系统本身呈现,因此它不存在于应用程序的元素子树中。
我已经记录以下内容:
print("XYZ:\(app.alerts.count)")//0 var existence = app.staticTexts["Allow “App Name” to access your location while you use the app?"].exists print("XYZ:\(existence)")//false existence = app.buttons["Allow"].exists print("XYZ:\(existence)") //false
甚至UI录制产生类似的代码:
XCUIApplication().alerts["Allow “App Name” to access your location while you use the app?"].collectionViews.buttons["Allow"].tap()
我没有找到可以让我过去这个问题的API。例如:
>点击屏幕上的某个位置
>在应用程式之外取得快讯
那么我怎么能过去呢?有没有办法配置测试目标,以便不需要位置服务授权。
解决方法
Xcode 7.1
Xcode 7.1终于解决了系统警报的问题。但是,有两个小问题。
首先,您需要在呈现警报之前设置“UI Interuption处理程序”。这是告诉框架如何处理警报时出现的方式。
第二,在提示警报后,您必须与界面交互。只需点击应用程序的工作很好,但是是必需的。
addUIInterruptionMonitorWithDescription("Location Dialog") { (alert) -> Bool in alert.buttons["Allow"].tap() return true } app.buttons["Request Location"].tap() app.tap() // need to interact with the app for the handler to fire
“位置对话框”只是一个字符串,以帮助开发人员识别哪个处理程序被访问,它不是特定于警报类型。
Xcode 7.0
以下将在Xcode 7 Beta 6中解除单个“系统警报”:
let app = XCUIApplication() app.launch() // trigger location permission dialog app.alerts.element.collectionViews.buttons["Allow"].tap()
Beta 6引入了一系列用于UI测试的修复程序,我相信这是其中之一。
还要注意,我直接在alalerts上调用-lelement。在XCUIElementQuery上调用元素强制框架在屏幕上选择“唯一”匹配元素。这对于一次只能有一个可见的警报非常有用。但是,如果您尝试使用这个标签,并且有两个标签,框架将引发异常。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。