2012-03-16 6 views
2

私のアプリケーションの自動テストを実装しようとしています。ユニットテストのSlidingDrawer ButtonでTouchUtils.clickView()が機能しない

私はタッチしたときに開くスライド式の引き出しを持っていますが、内側にボタンがあります。 私がしたいのは、スライド式の引き出しをタッチして開くこと、内側のボタンを押してスライド式の引き出しをもう一度触れることです。ここで

は、私はこのコードは時にはない、機能していることを発見した私のテストのコード( 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

答えて

1

解決策が見つかりました。このエラーは、SlidingDrawerを開くために使用されたイベントの選択が間違っています。

AndroidのドキュメントSlidingDrawerは2つの子供のビューで構成部品であることを述べている:ハンドル、ユーザーことがをドラッグ...

ので、使用の必要性TouchUtils.dragViewが(あり)

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... 
:代わりTouchUtils.tapView()ここ

方法は実施例であります

関連する問題