经过了两个月左右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内的点击的坐标.
该下班了,先写到这里.