我正在使用带有拖动侦听器的简单应用程序将按钮从屏幕的一半拖到另一半。我能够在任何模拟器或设备上拖动元素,并使用Monkey Runner实现的拖动功能。当我尝试使用calabash使用“performAction('drag',50,30,25,75,15)”(和drag_coordinates)在屏幕上拖动元素时,会出现“拖动阴影”,然后立即停止拖动动作(见图)。
任何其他拖动(不在可拖动元素上)都有效,包括那些打开抽屉或那些“移动”画布上绘制的矩形的拖拽。我试图让Drag Shadow为空,以防它干扰拖动。断开的拖动动画会阻止与calabash的任何其他交互,除非我与设备交互以取消拖动。
是否有其他人注意到在屏幕上拖动元素/对象并在拖动开始时冻结它的类似问题?我意识到Calabash在其核心使用robotium,所以如果这些测试框架中的任何一个适用于此。我使用的是最新的calabash-android-0.4.21,甚至只是试用了beta 0.5版本。
MainActivity代码: `package com.example.dragndrop;
import android.os.Bundle;
import android.app.Activity;
import android.content.ClipData;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
Button drag;
LinearLayout drop;
TextView text,sucess;
int total , failure = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drag = (Button)findViewById(R.id.one);
drop = (LinearLayout)findViewById(R.id.toplinear);
text = (TextView)findViewById(R.id.Total);
sucess = (TextView)findViewById(R.id.Sucess);
sucess.setText("Sucessful Drops :"+(total - failure));
text.setText("Total Drops: "+total);
drag.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
// TODO Auto-generated method stub
final int action = event.getAction();
switch(action) {
case DragEvent.ACTION_DRAG_STARTED:
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DROP:{
failure = failure+1;
return(true);
}
case DragEvent.ACTION_DRAG_ENDED:{
total = total +1;
int suc = total - failure;
sucess.setText("Sucessful Drops :"+suc);
text.setText("Total Drops: "+total);
return(true);
}
default:
break;
}
return true;
}});
drag.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent arg1) {
// TODO Auto-generated method stub
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadow = new View.DragShadowBuilder(drag);
v.startDrag(data, shadow, null, 0);
return false;
}
});
}
}`
答案 0 :(得分:0)
尝试以下解决方案:
performAction('drag',50,30,25,75,1)
或者这个:
%x{#{default_device.adb_command} shell input swipe 50 30 25 75 15}