2013-03-13 30 views
0

我寫一個Android JUnit測試,通過MotionEvents列表進行迭代,並且分派他們到活動測試。對於大多數事件,我只能使用activity.dispatchTouchEvent(MotionEvent)方法。對於對話框,我必須獲取內存中的對話框並直接調用dispatchTouchEvent。我遇到了android.widget.Spinner對象的問題。 dispatchTouchEvent方法似乎被忽略。的Android無法調度觸摸事件,以微調

例如,微調(模式= DIALOG)出現在屏幕上時,測試碼分派與適當的(X,Y)一個MotionEvent座標和動作(ACTION_DOWN接着ACTION_UP):

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直接單擊微調,但不希望長期。有什麼建議麼?

+0

你爲什麼不使用spinner.performClick();而不是spinner.dispatchTouchEvent(motionEvent); ? – maszter 2013-03-13 16:42:31

+0

這樣做是爲了捕獲所有的運動事件。 (例如ACTION_DOWN,ACTION_UP,ACTION_MOVE)。在做出選擇之前,用戶可能會滾動Spinner。 – diggybub 2013-03-14 19:11:41

回答

0

因此,也許你可以在活動水平通過爲微調的情況下做中心調度事件作爲X,Y(Robotium這樣做,但通過儀器傳遞motionEvent而不是活動)。