週一新公司入職,面試時考察的OC,進來發現項目要用swift寫。於是開始學習swift。項目組安排項目任務,大體代碼有個大牛已經寫差不多了。小組接手先從寫測試開始,順路磨練swift技術。
記錄一下今天碰到的UITest的坑:
1,彈出 Timestamped Event Matching Error: Failed to find matching element
當進行代碼錄製時(很多同學反應代碼錄製那個按鈕是灰的,記得把光標點到testXXX的函數裏面,就會變紅啦,這個問題你去google,百度是不會有答案的,stackoverflow很多這個問題都沒有答案,原來這麼簡單),點擊沒有identifier的UISwitch時,會出現這個問題。網上有說添加如下代碼的:
tSwitch.isAccessibilityElement = true
tSwitch.accessibilityIdentifier = "saveAccountSwitch"
我添加後,清空,重啓,關了開開了關都不好用。組裏TL跳過錄制,弄了個硬招來獲取這個開關:
let app = XCUIApplication()
app.switches.element(boundBy: 0)
親測,OK。
2,測試UISwitch開關的值是否是關閉
這個問題很噁心,app.switches.element(boundBy: 0).value包裝的值竟然是字符串的0,害得我好找。代碼如下:
if let switchValue = app.switches.element(boundBy: 0).value {
if let switchIntValue = switchValue as? String{
XCTAssertEqual(switchIntValue, "0", "Save switch default value is not off")
}else {
XCTFail("Save switch value unnormal")
}
}else {
XCTFail("Save switch do not have value may be it's not exist")
}
3,順便學習了?!
as(有保障下類型轉換) as?(轉換成可空類型) as!(強轉可崩) 以及 if let (判空安全解) ,value!(強解),Type!(自動強解類型) 的優勢及區別。 ??是三目運算符的簡寫形式。
總結:項目的壓力+N多的資料+朋友支持學習還是蠻快的。swift類型安全的真是很舒服,完全不會再有寫完了擔心判斷不周,遺漏空值的感覺了。添加了有限的語法符號,最大化表達能力,而且真的代碼邏輯順暢多了。唯一的遺憾是聽說指針不見了,作爲愛C族感到惋惜。