從零開始:如何成功建置並執行你的第一次UITest
紀錄在從未執行過 UITtest 的 app 讓它能成功跑 UITtest 期間遇到的狀況
從零開始:如何成功建置並執行你的第一次UITest
紀錄在從未執行過 UITtest 的 app 讓它能成功跑 UITtest 期間遇到的狀況
紀錄在從未執行過 UITtest 的 app 讓它能成功跑 UITtest 期間遇到的狀況
先讓 UITests 能 build 成功
錯誤:There is no scheme and/or test plan that contains every test you are trying to run.
處理:UITests 沒被配置到任何 target 的 test 階段,所以從 scheme Edit 中把 UT scheme 的 test 階段加進去就可以了
錯誤:各種文檔案顯示 build 失敗
處理:清除其他無關檔案卻有勾選 UITest 的檔案
跟UITtest無相關的檔案都取消掉
錯誤:Undefined symbols: Linker command failed with exit code 1 (use -v to see invocation)
處理:清除不必要的 Compile Sources 和 Copy Bundle Resources
不會用到的通通刪除,一些比較久的 code 可能多了很多無關的
第一次build成功
要能自動登入
怎麼找到登入時帳密的輸入框?
(輸入框是 自定義物件 但在 vc 有拉出物件)
1
2
3
4
// 在 VC 長這樣
@IBOutlet var xxxView(自定義物件): userIDView!
// 在 UITest 這樣抓
private lazy var userIDInputView = app.otherElements["userIDView"]
物件不只一層,裡面有多個物件時怎麼抓?
可以透過下 break point 時下指令 po 物件.children(matching: .any)
因為原本一直找不到輸入使用者名稱的 textfield,後來這樣才發現原來不是單純的在 view 的下一層。
用 .descendants 似乎可以列出更多層
登入時的帳號密碼可能是 secureTextFields 要留意跟 textFields 是不一樣的!
成功進行登入
跑 UITest 可能失敗的狀況
可能造成測試失敗:登入進行時可能出現的警告視窗如何點掉?
1
2
3
4
5
6
/// 可以檢查警告彈窗上的按鈕,有偵測到就點掉
sleep(1) // 等待彈窗出現緩衝時間
if app.buttons.staticTexts["按鈕文字"].exits {
let btn = app.buttons.staticTexts["按鈕文字"]
btn.tap()
}
錯誤:Neither element nor any descendant has keyboard focus.
要點擊輸入的元素(輸入框之類的)沒有鍵盤焦點(沒點擊到、沒有firstresponse之類的)
可能有開 ipone 的輔助操作(畫面會出現圓點) 蓋到要點擊的輸入框了
Post converted from Medium by ZMediumToMarkdown.





