2015-09-11 65 views
5

我試圖通過快照當前屏幕元素(標籤,圖像,按鈕)並將其可訪問性信息保存到Json文件來擴展Xcode 7中的新UI測試功能。在Xcode 7中進行UI測試時應用程序資源不可用

這個想法是,當稍後運行UI測試時,可以獲取當前屏幕快照並與現有屏幕快照進行比較,如果發現其他元素或缺失元素,測試將失敗。

不幸的是,在UI測試期間,即使使用正確的目標,應用程序資源似乎也不可用,因此無法加載json文件進行比較。下面的標準代碼無法對資源加載:

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

我能理解爲什麼蘋果已經採取了這種沙箱方法,如UI測試應根據所發生的事情在屏幕上,並訪問應用程序不應該的工作」不需要,但無法訪問資源包是一件痛苦的事情。

那麼在Xcode 7 UI測試期間,有沒有辦法從應用程序或其他本地方式加載本地資源?

保存文件在本地(自動)也將是一個巨大的優勢,將保存手動創建它們。

+1

似乎你遇到了ol d與測試和捆綁問題,如果這樣看這個問題http://stackoverflow.com/a/19636417/1403732 – sage444

+0

謝謝你,這是問題。已經發布了一個答案,歡呼。 – danfordham

回答

4

由於@ sage444

對於單元測試mainBundle()方法用於檢索資源路徑,使用一類不不起作用。

guard let resourcePath = NSBundle (forClass: self.dynamicType).pathForResource (contentName, ofType:"json") else { 
     XCTFail ("can't load resource \(contentName)") 
     return 
    } 
0

感謝@danfordham

更新了斯威夫特3

1)複製捆綁資源 enter image description here

2)參考新的軟件包這種方式,

guard let path = Bundle(for: type(of: self)).path(forResource: contentName, ofType: "json") else { 
    XCTFail ("can't load resource \(contentName)") 
    return 
} 
相關問題