swift UITest 之datepicker與tableview處理

  經過了兩個月左右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內的點擊的座標.

該下班了,先寫到這裏.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章