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内的点击的坐标.

该下班了,先写到这里.

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值