我正在開發一個iOS項目,我需要從UI測試目標訪問主機應用程序的代碼,但是我發現它顯示鏈接錯誤:undefined符號當我試圖。我發現這個目標的測試主機和軟件包加載器都是空的,所以我將它們設置爲我的主機應用程序,並可以通過鏈接錯誤。但是,在運行時,調用XCUIApplication.launch()時仍會失敗。有沒有人想過如何從這個UI測試目標訪問主機應用程序的代碼?無法做到這一點,我們不得不做所有的UI測試,這是非常片狀的。我們肯定需要在測試場景中使用非UI步驟。我正在使用Swift來處理我的項目。從Xcode 7 UI訪問主機應用程序代碼測試目標
回答
使用Apple在WWDC 15中引入的新UI自動化框架,無法從UI-Automation測試中訪問您的應用程序的代碼。它意在模擬用戶可以訪問的內容,這有時會令人沮喪。
你有沒有關於應用程序代碼不能從ui測試中訪問的聲明來源? – singingAtom
@singingAtom UI測試是與應用程序分離的模塊,因此不會像邏輯測試那樣在應用程序中運行。他們共享代碼的唯一方法是編譯所有需要在這兩個模塊之間共享的應用程序文件。希望有所幫助。 – cakes88
@ cakes88你有沒有提及你最近的聲明如何工作? –
在運行UI測試之前,我使用以下技術在我的應用程序中設置值。有用的設置默認值或打開網絡嘲笑,等等。大多數情況下,我不需要閱讀什麼都不是應用程序。一切都反映在用戶界面中,並可以通過這種方式進行測試。很快我們將添加測試以確保應用程序進行某些網絡調用。我還不確定我們將如何在UI測試用例中測試它。
在你的UI測試設置參數
let app = XCUIApplication()
app.launchArguments = ["ResetDefaults", "NoAnimations", "UserHasRegistered"]
app.launch()
在你的應用程序讀取參數
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
var arguments = NSProcessInfo.processInfo().arguments
arguments.removeFirst()
print("App launching with the following arguments: \(arguments)")
// Always clear the defaults first
if arguments.contains("ResetDefaults") {
destroyUserDefaults()
clearKeychain()
}
for argument in arguments {
switch argument {
case "NoAnimations":
UIView.setAnimationsEnabled(false)
case "UserHasRegistered":
Defaults.userRegistered = true
default:
break
}
}
}
額外獎金:如果您使用啓動參數來配置你的應用程序,是微不足道的標誌添加到您的Xcode方案。例如,我有一個清除所有存儲數據的方案,並用成功響應對所有登錄嘗試進行存根。我現在可以通過模擬器「登錄」而不需要訪問任何服務器。
哈哈,我剛剛實現了。作爲第二步,我試圖通過文件界面傳回信息。我在應用程序中寫入文件'a',並嘗試在測試中讀取它,但它不一樣。不知道爲什麼... @「/ var/mobile/Containers/Data/Application/DD4A912D-5808-40AC-9BAD-0」/ var/mobile/Containers/Data/Application/8EDD0F16-005B-49E7-B8E3-726F195989DD/Documents/a「 @ 0475842190DA/Documents/a「 –
如果你想出點什麼,寫一篇博文!我相信很多人會感興趣。我認爲前進的道路可能是對本地服務器進行API調用。聽起來有點複雜,但我敢打賭它可以用30行python腳本處理。 – kubi
請注意,對於要由NSUserDefaults解析的參數,鍵和值(例如'-AppleLanguages'和'(en)'需要是兩個獨立的數組元素。 –
- 1. 從XCode UI訪問項目文件測試目標
- 2. 的Xcode 7的UI測試訪問欄按鈕項目
- 3. 目標主機無法訪問:Android應用程序
- 4. 從XCTestCase訪問項目代碼 - UI測試
- 5. 用於UI測試的XCode 7代碼覆蓋率結果
- 6. Xcode 7 UI測試訂單
- 7. Xcode測試目標與主機應用程序強制錯誤的目標進入方案的構建部分
- 8. Xcode 7 UI測試目標區域設置和區域設置
- 9. 應用程序的Android測試代碼?
- 10. 從Android本機應用程序訪問JS代碼
- 11. XCode 7 UI測試 - 可用行動
- 12. 在Xcode 7中進行UI測試時應用程序資源不可用
- 13. 從主機編程訪問碼頭卷
- 14. Facebook應用程序訪問專用網絡內的主機中的代碼
- 15. 使用CodedUI測試測試WPF應用程序,編碼的ui測試項目應共享解決方案嗎?
- 16. XCode 7中UI測試的文檔
- 17. Xcode 7中的特定UI測試
- 18. Xcode 7 UI測試不記錄刷卡
- 19. Xcode單元測試 - 從應用程序的包中訪問資源?
- 20. 在單元測試代碼中訪問部署目標
- 21. 從Web UI測試切換到Windows Forms應用程序測試
- 22. Xcode 7:使用iOS 9下的部署目標編寫UI測試?
- 23. Java應用程序 - 集成測試期間訪問的度量代碼
- 24. 從servlet應用程序中訪問server.xml中的主機信息
- 25. 無法從Android應用程序訪問本地主機
- 26. 如何讓單元測試在swift中訪問應用程序的目標類
- 27. 使用OpenCover運行編碼的UI測試未收集應用程序代碼
- 28. Xcode UI測試:如何測試應用程序的第一次啓動
- 29. Xcode 7 UI測試如何與Xcode機器人集成?它是否顯示UI測試步驟?
- 30. Xcode 7:應用程序測試和UI測試之間的鴻溝是不可橋接的嗎?
我有完全相同的問題。我使用[link](http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/)作爲bundle loader/test host和[link]( http://savvyapps.com/blog/how-to-implement-ui-testing-in-an-existing-ios-app),其中註明要在主要目標中驗證「啓用可測試性」。我已經得到了與你完全相同的觀點。自發布此問題後的最後幾天發生任何運氣? – Chris
就像@Konnor在他們的回答中所說的,你無法從UI測試中訪問你的應用程序的進程。你想做什麼?在我們的測試中,我已經成功解決了這些限制。 – kubi
@kubi:我對您的解決方法感興趣。我想在單例對象中設置/讀取一個屬性。因爲這可以通過在測試應用程序中添加一個用戶界面來完成,但這有點矯枉過正。你有沒有找到更好的解決方案? –