【发布时间】:2013-03-13 15:56:05
【问题描述】:
我正在编写一个 Android JUnit 测试,它遍历 MotionEvents 列表并将它们分派给被测活动。对于大多数事件,我可以只使用 activity.dispatchTouchEvent(MotionEvent) 方法。对于对话框,我必须在内存中获取对话框并直接调用dispatchTouchEvent。我在使用 android.widget.Spinner 对象时遇到问题。 dispatchTouchEvent 方法似乎被忽略了。
例如,一个 Spinner (Mode = DIALOG) 出现在屏幕上,测试代码正在调度一个具有正确 (x, y) 坐标和动作(ACTION_DOWN 后跟 ACTION_UP)的 MotionEvent:
Spinner spinner = (Spinner) activity.findViewById(R.id.spinnerId);
spinner.dispatchTouchEvent(motionEvent); //returns true, but Spinner has not been touched
View v = spinner.getChildAt(0);
v.dispatchTouchEvent(motionEvent); //returns false, Spinner has not been touched
目前,我正在使用 Robotium 直接单击 Spinner,但这不是长期需要的。有什么建议吗?
【问题讨论】:
-
为什么不使用 spinner.performClick();而不是 spinner.dispatchTouchEvent(motionEvent); ?
-
这个想法是捕捉所有的运动事件。 (例如 ACTION_DOWN、ACTION_UP、ACTION_MOVE)。用户可以在做出选择之前滚动浏览 Spinner。
标签: java android junit spinner motionevent