2017-03-13 11 views
2

私はエスプレッソで簡単なテストをしています。そのうちの1つは、ビューをクリックしてダイアログが表示されているかどうかを確認することです。エスプレッソはダイアログが表示されて失敗するまで待つことはありません

私の問題は時にはうまくいくことがあり、時にはうまくいかないことです。ダイアログを確認する前にの睡眠をに入れておくと常にうまくいきます。使用していないソリューション睡眠

onView(withId(R.id.forgot_password)).perform(click()); 
// only works if use Thread.sleep(ms) here 
onView(withText(R.string.reset_password)).check(matches(isDisplayed())); 

編集:

私は、静的なヘルパーとの対話を示したんだけど、簡素化がこれです。ここ

は私のコード(とてもシンプル)です。そして、私は途中でバックグラウンドタスクを実行していません。

最終TextInputDialog textInputDialog =新しい

TextInputDialog.Builder(context) 
       .setTitle(titleId) 
       .setInputType(inputType) 
       .setHint(hintId) 
       .setPreFilledText(preFilledText) 
       .setNegativeButton(R.string.cancel, null) 
       .setPositiveButton(positiveButtonId, onTextSubmittedListener) 
       .create(); 
textInputDialog.show(textInputDialog); 

ありがとうございました!

+0

私は睡眠が良い解決策ではない理由は分かりません。あなたは、一定の期間、そしてまさにそれが睡眠と同じことを待つことを望みます。 – MoGa

+1

そのクリックイベントはすぐにダイアログを表示するか、バックグラウンドジョブを実行してダイアログを表示しますか? – azizbekian

+1

thread.sleepはアンドロイドエスプレッソのテストでは良い解決策ではありません。通常は必要ありません。エスプレッソはメインスレッドが終了するまで待っていますので、ダイアログを待つ必要があります。ダイアログの表示方法を共有できますか? – stamanuel

答えて

1

最後に、アニメーションが問題だったようです。開発者のオプションメニューでアニメーションを無効にするには、エスプレッソの動作を適切に行う必要があります。この場合

Disable animations

、問題が解決されました。しかし、私の疑問に対するコメントのように、問題がバックグラウンドタスクになる可能性のある他のケースがあります。だから私は一見をお勧めしますIdlingResourcehttps://medium.com/azimolabs/wait-for-it-idlingresource-and-conditionwatcher-602055f32356#.pw55uipfjまたはこれはEspresso: Thread.sleep();

関連する問題