[解決済み] エスプレッソ: Thread.sleep( )
2022-08-20 12:50:42
質問
エスプレッソは、以下のものは必要ないと主張しています。
Thread.sleep()
は不要と主張していますが、私のコードはこれを含めないと動きません。私はあるIPに接続しており、接続中にプログレスダイアログが表示されます。私は
Thread.sleep()
を呼び出して、ダイアログが消えるのを待ちます。これは、私がそれを使用する私のテストコードです。
IP.enterIP(); // fills out an IP dialog (this is done with espresso)
//progress dialog is now shown
Thread.sleep(1500);
onView(withId(R.id.button).perform(click());
このコードを
Thread.sleep()
を呼び出したのですが、次のように表示されます。
R.id.Button
は存在しないのです。唯一、動作させることができる方法は
Thread.sleep()
を呼び出すことです。
また
Thread.sleep()
を次のように置き換えてみました。
getInstrumentation().waitForIdleSync()
のようなもので、まだうまくいきません。
この方法しかないのでしょうか?それとも何か見落としているのでしょうか?
よろしくお願いします。
どのように解決するのですか?
私の考えでは、正しいアプローチは次のようになります。
/** Perform action of waiting for a specific view id. */
public static ViewAction waitId(final int viewId, final long millis) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isRoot();
}
@Override
public String getDescription() {
return "wait for a specific view with id <" + viewId + "> during " + millis + " millis.";
}
@Override
public void perform(final UiController uiController, final View view) {
uiController.loopMainThreadUntilIdle();
final long startTime = System.currentTimeMillis();
final long endTime = startTime + millis;
final Matcher<View> viewMatcher = withId(viewId);
do {
for (View child : TreeIterables.breadthFirstViewTraversal(view)) {
// found view with required ID
if (viewMatcher.matches(child)) {
return;
}
}
uiController.loopMainThreadForAtLeast(50);
}
while (System.currentTimeMillis() < endTime);
// timeout happens
throw new PerformException.Builder()
.withActionDescription(this.getDescription())
.withViewDescription(HumanReadables.describe(view))
.withCause(new TimeoutException())
.build();
}
};
}
といった使い方のパターンになります。
// wait during 15 seconds for a view
onView(isRoot()).perform(waitId(R.id.dialogEditor, TimeUnit.SECONDS.toMillis(15)));
関連
-
[解決済み】プログレスダイアログとバックグラウンドスレッドがアクティブなときに、画面の向きが変わるのをどう処理するか?
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] Android Studioの「未実装メソッドの追加」機能
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] アンドロイドのdatepickerダイアログで最大の日付を設定するには?
-
[解決済み] グリッドビューの高さが削減される
-
[解決済み] Android APKファイルの中身を見るには?
-
[解決済み] 文字列リソースにHTML?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] Android Studio - あいまいなメソッド呼び出し getClass()
-
[解決済み] Androidのadb logcatでTAG名で特定のメッセージを除外する方法は?
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] アンドロイドでシェイクを検出するには?
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] Android端末がHDPI画面かMDPI画面かを確認する方法は?
-
[解決済み] react nativeアプリのバージョン番号を更新する方法
-
[解決済み] Androidでツールバーの戻るボタンの色を変えるには?
-
[解決済み] Android APKファイルの中身を見るには?