5

我正在尝试通过对当前屏幕元素(标签、图像、按钮)进行快照并将其可访问性信息保存到 json 文件来扩展 Xcode 7 中的新 UI 测试功能。

这个想法是,当稍后运行 UI 测试时,可以拍摄当前屏幕快照并与现有屏幕快照进行比较,如果发现额外或缺少的元素,测试将失败。

不幸的是,即使目标正确,在 UI 测试期间应用程序资源似乎也不可用,因此无法加载 json 文件进行比较。以下标准代码无法加载资源:

guard let resourcePath = NSBundle.mainBundle ().pathForResource ("StartScreenShapshot", ofType:"json") else {
        XCTFail ("can't load resource StartScreenShapshot")
        return
    }

我可以理解为什么 Apple 采用了这种沙盒方法,因为 UI 测试应该基于屏幕上发生的事情,并且不应该需要访问应用程序的工作,但无法访问资源包是一件痛苦的事情。

那么,在 Xcode 7 UI 测试期间,有没有办法从应用程序加载本地资源,或者以其他方式在本地加载?

将文件保存在本地(自动)也将是一个巨大的优势,可以节省手动创建它们。

4

2 回答 2

6

感谢@sage444

对于单元测试, mainBundle() 方法不适用于检索资源路径,使用类可以。

 guard let resourcePath = NSBundle (forClass: self.dynamicType).pathForResource (contentName, ofType:"json") else {
        XCTFail ("can't load resource \(contentName)")
        return
    }
于 2015-09-11T14:02:56.250 回答
1

谢谢@danfordham

为 Swift 3 更新

1)复制捆绑资源 在此处输入图像描述

2)以这种方式引用新包,

guard let path = Bundle(for: type(of: self)).path(forResource: contentName, ofType: "json") else {
    XCTFail ("can't load resource \(contentName)")
    return
}
于 2017-05-10T18:03:34.010 回答