Java Android Espresso,我如何才能只执行长按并向下滑动继续? 我的意思是,我可以按顺序执行这两个动作,但是在中间有一个 ActudioUp> MyToCon事件,我删除了我在视图上使用的OnTouChistListar。
就我而言,我需要避免触发那个事件 我有一个有玩家的运动场,其中一个用例是长点击后移动一个玩家,该功能运行良好,但我无法在测试中重现该功能 这是我想测试的类的代码,我试图浓缩与问题相关的所有代码Java Android Espresso,我如何才能只执行长按并向下滑动继续? 我的意思是,我可以按顺序执行这两个动作,但是在中间有一个 ActudioUp> MyToCon事件,我删除了我在视图上使用的OnTouChistListar。,java,android,testing,android-espresso,Java,Android,Testing,Android Espresso,就我而言,我需要避免触发那个事件 我有一个有玩家的运动场,其中一个用例是长点击后移动一个玩家,该功能运行良好,但我无法在测试中重现该功能 这是我想测试的类的代码,我试图浓缩与问题相关的所有代码 公共类足球场布局扩展了RelativeLayout实现View.OnTouchListener{ [...] 公共玩家(现场玩家){ 最终FieldPlayerView fpv=新的FieldPlayerView(getContext(),播放器); addView(fpv); fpv.setOnLon
公共类足球场布局扩展了RelativeLayout实现View.OnTouchListener{
[...]
公共玩家(现场玩家){
最终FieldPlayerView fpv=新的FieldPlayerView(getContext(),播放器);
addView(fpv);
fpv.setOnLongClickListener(新的OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图v){
v、 setOnTouchListener(足球场布局,this);
返回true;
}
});
}
[...]
公共浮动dX=无增量,dY=无增量;
@凌驾
公共布尔onTouch(视图、运动事件){
开关(event.getAction()){
case MotionEvent.ACTION\u移动:
如果(dX==NO_DELTA | | dY==NO_DELTA){setDelta(视图,事件);}
view.animate()
.x(event.getRawX()+dX)
.y(event.getRawY()+dY)
.setDuration(0)
.start();
打破
case MotionEvent.ACTION\u UP:
view.setOnTouchListener(null);
重置增量();
打破
违约:
返回false;
}
返回true;
}
}
这是测试
公共类移动LongClickActivityTest{
[...]
@试验
public void playerCanbeMovedvertialAfterLongClick()引发中断异常{
onView(带id(R.id.activity_字段))。检查(匹配项(isDisplayed());
View=mActivityRule.getActivity().findViewById(R.id.test\u播放器);
float[]begincord={view.getX(),view.getY()};
onView(带id(R.id.test_player)).perform(longClick());
onView(带id(R.id.test_player)).perform(swipdown());
float[]endCoord={view.getX(),view.getY()};
资产(Begincord[1],而非(equalTo(endCoord[1]));
}
}
我总是使用框架的ViewActions,或者使用另一个人的配方来改变某些事情,但我从未尝试构建复杂的ViewAction,我有点迷茫。我已经看到了您在我的问题下的评论。事实上,我现在也遇到了同样的问题(有Injectu事件许可,我的所有变通方法都无法处理)。我在半年前就使用了这个代码,它对我来说没有任何问题 我可以为您提出其他解决方案,但我不能100%肯定它会起作用。因为我现在创造的速度非常快。我以后可能有更多的时间来看看 但请尝试以下解决方案:
public GeneralSwipeAction(Swiper swiper, CoordinatesProvider startCoordinatesProvider, CoordinatesProvider endCoordinatesProvider, PrecisionDescriber precisionDescriber) {
this.swiper = swiper;
this.startCoordinatesProvider = startCoordinatesProvider;
this.endCoordinatesProvider = endCoordinatesProvider;
this.precisionDescriber = precisionDescriber;
}
import android.support.test.espresso.action.CoordinatesProvider;
import android.view.View;
public class CustomisableCoordinatesProvider implements CoordinatesProvider {
private int x;
private int y;
public CustomisableCoordinatesProvider(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public float[] calculateCoordinates(View view) {
return new float[]{x,y};
}
}
public static ViewAction drag(int startX, int startY, int endX, int endY) {
return new GeneralSwipeAction(
Swipe.FAST,
new CustomisableCoordinatesProvider(startX, startY),
new CustomisableCoordinatesProvider(endX, endY),
Press.FINGER);
}
onView(withId(R.id.test_player)).perform(drag(0, 100, 0, 100));
我还没有测试过。但它可能会工作或帮助您指向正确的方向。尝试一下,告诉我它是否有效,我自己也很好奇:)我将使用来探索一个可能的解决方案,我会检查它,但在我的主要问题中,我想重新创建onlongclick和swipe,而不使用ACTION\u UP事件。如果你的答案帮助我解决了这个问题,我会把它标记为正确的。因为(1)没有经过测试,(2)不起作用(遇到安全异常)。