經過了兩個月左右swift的工作,現在用的終於比較熟練了.項目裏UITest 與 UTTest代碼敲的比較多.這幾天碰見的比較突出的問題點就是UITest中DatePicker與tableView的cell滑動處理. 模擬用戶滑動的函數是swipeUp(), swipeDown(),swipeLeft()還有swipeRight(),但是這幾個函數滑動距離似乎沒辦法掌控,於是使用了另一個方法:press(forDuration: , thenDragTo: ),這個方法可以按住一個控件的指定座標位置,滑動到另一個控件的指定座標位置.先上一段tableView的代碼:
myCell.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: offset)).press(forDuration: 0.2, thenDragTo: aTableView.coordinate(withNormalizedOffset: CGVector(dx: 0.8, dy: 0.1)))
說明:
myCell是aTableView中的一個可見cell.
CGVector中dx與dy是控件左到右,上到下的比率,取值爲0.0~1.0. 這裏的座標打出來看的時候一般都是絕對座標,通過這種控件內的offset來取得點擊的座標.同理,aTableView的coordinate也是自身絕對座標加offset來換算.
點擊這個點然後thenDragTo,名如其意, 手指在0.2秒內由cell上的座標點劃到tableView的指定座標點,來實現了類似指定距離的滑動.
注意:在tableView可見範圍之外的cell也會有座標,滑動的時候大概率會觸發其他事件,比如系統的上滑或下滑手勢.
再看一段DatePicker的代碼:
if #available(iOS 11.4, *) {
app.pickerWheels.element.adjust(toPickerWheelValue: "2014")
} else {
let myPredicate = NSPredicate(format: "value like '*2015*'")
let wheel = app.pickerWheels.element(matching: myPredicate)
wheel.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5)).press(forDuration: 0.3, thenDragTo: wheel.coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 0.125)))
}
說明:
獲取datePicker這個元素比較費勁,else裏當前picker如果顯示的是2015,它的value其實是2015 xx of yy (xx爲序號,yy爲總數),所以取得picker要用個like,這樣就可以用當前顯示的值來取得picker.
datePicker這個滑動距離要自己去算,每個cell的高度去除背景View高度,得到一個大概的滑動距離,靠邊的cell要適當縮小.這樣就能從一個指定cell滑動到另一個指定的cell了.11.4與之前版本動作不一致.可以直接滑倒指定值.注意else裏前後都是Picker內的點擊的座標.
該下班了,先寫到這裏.