加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Xcode7 | Xcode UI测试|如何处理位置服务警报?

发布时间:2020-12-15 02:00:51 所属栏目:百科 来源:网络整理
导读:我正在使用Xcode7 / iOS 9中引入的XCUIApplication,XCUIElement和XCUIElementQuery为我的一个应用程序编写UI测试用例。 我打了一个路障。测试用例中的一个屏幕需要iOS的定位服务。如预期的那样,用户被提示是否允许使用带有警报的位置服务:标题为“允许”
我正在使用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上调用元素强制框架在屏幕上选择“唯一”匹配元素。这对于一次只能有一个可见的警报非常有用。但是,如果您尝试使用这个标签,并且有两个标签,框架将引发异常。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读