2016-02-09 6 views
7

エスプレッソ経由でドロップアクション&を実行することは可能ですか?私は私の自動化テストでいくつかの条件を受け入れるために、1つのビューを(直線で)下に移動する必要があります。ドラッグ&ドロップエスプレッソ

答えて

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