2012-03-16 73 views
2

我試圖爲我的應用程序實現自動化測試。TouchUtils.clickView()在單元測試中的SlidingDrawer按鈕上不起作用

我有滑動抽屜在視圖中打開時觸摸,裏面是一個按鈕。 我想要做的就是觸摸滑動抽屜打開它,觸摸裏面的按鈕並關閉滑動抽屜再次觸摸它。

這是一件我的測試代碼( ActivityInstrumentationTestCase2

ToggleButton insideBtn = (ToggleButton) mActivity.findViewById(R.id.sliding_btn); 
Button drawerBtn = (Button) mActivity.findViewById(R.id.drawer_btn); 
TouchUtils.tapView(this,drawerBtn); 
TouchUtils.tapView(this, insideBtn); 
TouchUtils.tapView(this, drawerBtn); 
...some assertion ... 

我發現這段代碼有時工作,有時沒有。問題在於抽屜沒有打開後導致 insideBtn無法觸摸。

所以,我想這個代碼:

ToggleButton insideBtn = (ToggleButton) mActivity.findViewById(R.id.sliding_btn); 
Button drawerBtn = (Button) mActivity.findViewById(R.id.drawer_btn); 
SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer); 
while(!drawer.isOpened()) { 
    TouchUtils.tapView(this,drawerBtn); 
} 
TouchUtils.tapView(this, insideBtn); 
TouchUtils.tapView(this, drawerBtn); 
...some assertion ... 

但結果是,有時當測試工作在它第一次工作所以不需要循環。但是,當它不工作循環正在工作,直到無限 - 沒有觸摸導致抽屜被打開。

你有什麼想法如何寫這個測試工作可靠嗎?

+0

我以爲這可能是同步問題,所以我試着在觸摸代碼後面加上_mInstrumentation.waitForIdleSync()_。沒有效果。 – Michal 2012-03-16 17:46:21

回答

1

我找到了解決方案。錯誤是用於打開SlidingDrawer的事件的錯誤選擇。

Android的文檔稱,SlidingDrawer是兩個孩子的意見組成的組件:手柄,使用戶拖動 ...

因此,有必要使用TouchUtils.dragView()方法而不是TouchUtils.tapView()

這裏是一個工作示例:

ToggleButton insideBtn = (ToggleButton) mActivity.findViewById(R.id.sliding_btn); 
Button drawerBtn = (Button) mActivity.findViewById(R.id.drawer_btn); 
TouchUtils.dragViewToTop(this,drawerBtn); 
TouchUtils.tapView(this, insideBtn); 
TouchUtils.dragViewToBottom(this,mActivity,drawerBtn); 
...Some assertion...