Xcode7 | Xcode UI测试|如何处理位置服务警报?
我正在使用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上调用元素强制框架在屏幕上选择“唯一”匹配元素。这对于一次只能有一个可见的警报非常有用。但是,如果您尝试使用这个标签,并且有两个标签,框架将引发异常。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |