uiAutomator测试框架,深入pinchOut() pinchIn()

pinchOut() 和pinchIn() 方法有俩个需传入的参数int percent, int steps

percent即从1到100的整数,percent值越大,滑动的范围就越大。通过这个值的设置,可以避免从在界面上滑动某些死角位置开始滑动。

steps字面意思是步骤,其实这个值是滑动速度。在做拖动动作(scroll steps)时,源码默认设置的steps值为55,在做滑动动作(fling steps)是,源码默认为5。即,该值越小,滑动的速度越快,最小值为2,即达到最快滑动速度。这个可以通过源码看出来。

steps是的实际意思是,我们执行一个动作将该动作划分的步骤,这一部分不需研究的人可以略过。举个例子来说吧,我们做最快滑动动作,即steps = 2,我们执行滑动距离为x,我们将x划分成了两部分(即 x / steps),真正执行滑动动作是,先在起始点按下touchDown,从起始点以一个未知速度(最快滑动速度,比人在界面能做的最快滑动块吧?或许呢,我也不知道。)滑动到x的二分之一处,再休息MOTION_EVENT_INJECTION_DELAY_MILLIS(该值为5ms)。然后又执行下一个滑动的动作,最后,在终点touchUp。这样,即实现最快速度的滑动。懂了吧?!~好吧,不懂你看看源码吧= =


执行这俩个方法时,首选他会通过findAccessibilityNodeInfo方法去查找调用该方法的对象是否存在。

然后,当该对象存在时候,得到该对象可视的bounds,通过这个bounds来计算做该手势在屏幕上 的起始点 和结束点。(注:4.3源码注释有误,注释意思是说在屏幕的对角线位置,即: pinchOut是由中间同时向左上角和 右下角做放大动作 ,pinchIn 由 由左上角和右下角同时向中间做缩小动作。 但是实际代码的计算执行是,在屏幕的水平位置,即:y轴不变,x轴上做缩放动作)这一点大家注意。

计算出起始点 和 结束位置点 后,会调用UiObject 类里面的performTwoPointerGesture方法,该方法将传入的点的信息继续做封装。封装为PointerCoords对象(该类是MotionEvent的子类,作用是传输对象的指针坐标。)然后会调用InteractionController类里面的performMultiPointerGesture,该方法会调用MotionEvent.obtain方法,通过框架底层,如UiAutomation类,IUiAutomationConnection (AIDL)。最终注入该动作。整个执行流程就是这样。

你可能感兴趣的:(java,源码,框架,测试)