2016-02-09 153 views
7

是否可以通过Espresso执行拖动&拖放操作?为了在我的自动化测试中接受一些条件,我需要向下移动一个视图(以直线形式)。拖放浓缩咖啡

回答

8

您可以使用GeneralSwipeAction来拖放&拖放。

public static ViewAction swipeUp() { 
return new GeneralSwipeAction(Swipe.FAST, GeneralLocation.BOTTOM_CENTER, 
    GeneralLocation.TOP_CENTER, Press.FINGER); 
} 

您也可以自定义位置以符合您的要求。

+0

swipeDown(),swipeUp()对我不起作用,因为我需要将圆圈移动到特定位置。 – F1sher

+1

在其他情况下,您的代码对我有用。谢谢。 – F1sher

3

多数民众赞成我是如何做到这一点。您可以更多地访问您的视图应该发生的情况。但接受的答案也执行拖动&下降。

public static void drag(Instrumentation inst, float fromX, float toX, float fromY, 
          float toY, int stepCount) { 
     long downTime = SystemClock.uptimeMillis(); 
     long eventTime = SystemClock.uptimeMillis(); 

     float y = fromY; 
     float x = fromX; 

     float yStep = (toY - fromY)/stepCount; 
     float xStep = (toX - fromX)/stepCount; 

     MotionEvent event = MotionEvent.obtain(downTime, eventTime, 
       MotionEvent.ACTION_DOWN, x, y, 0); 
     inst.sendPointerSync(event); 
     for (int i = 0; i < stepCount; ++i) { 
      y += yStep; 
      x += xStep; 
      eventTime = SystemClock.uptimeMillis(); 
      event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, x, y, 0); 
      inst.sendPointerSync(event); 
     } 

     eventTime = SystemClock.uptimeMillis(); 
     event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x, y, 0); 
     inst.sendPointerSync(event); 
     inst.waitForIdleSync(); 
    } 
+0

你怎么称呼这个方法?我想测试一些不同的东西,但它可能是一个起点。 drag(InstrumentationRegistry.getInstrumentation(),0,100,0,100,20); – raultm

+1

这个调用引发了一个SecurityException:注入到另一个应用程序需要INJECT_EVENTS权限。而这种权限只适用于系统应用程序... – raultm

+0

我的问题是http://stackoverflow.com/questions/40759085/android-espresso-how-can-i-perform-onlongclick-and-slidedown-continued – raultm