web-dev-qa-db-ja.com

PerformException:「シングルクリック」の実行エラー

Android espresso testを実行するとエラーが発生しました:

com.google.Android.apps.common.testing.ui.espresso.PerformException:「id:is <2131034173>」のビューで「シングルクリック」を実行中にエラーが発生しました。

私のコードは簡単です:

onView(withId(R.id.btn)).perform(click());

ただし、このコードにはエラーはありません。

onView(withId(R.id.btn)).check(matches(isDisplayed()));

原因がわからない。

43
Winton Hou

トリックは、エラーの完全なスタックトレースを読み取ることです。中央には、次のような重要な情報がいくつかあります。

Caused by: Java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints:
at least 90 percent of the view's area is displayed to the user.
Target view: "ImageView{id=2131492903, res-name=button_hamburger, desc=opens the side drawer, visibility=VISIBLE, width=64, height=64, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=true, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=6.0, y=6.0}"

エラーの詳細を説明しています。

81
Alexander Pacha

ソフトキーボードが表示されていないことを確認してください。 closeSoftKeyboardViewActionで簡単に閉じることができます。

さらに、システムアニメーションが無効になっていることを確認してください。 Settings->Developing Options以下をオフにします:

  • ウィンドウアニメーションスケール
  • 遷移アニメーションスケール
  • アニメーターの継続時間スケール

また、これは他のアプリからのANRダイアログによって引き起こされる可能性があります。

問題が報告されました here も同様です。

29
appoll

ソフトキーボードが要素に重なっていたため、同じ問題が発生しました。この問題を解決するには、scrollTo()に続いてclick()を使用しました。

onView(withId(R.id.btn))
     .perform(scrollTo())
     .perform(click());

上記が機能しない場合は、最初に以下を追加してみてください。

onView(withId(R.id.myEditText)).perform(closeSoftKeyboard());
21
Prabin Timsina

私も使用してその問題がありました

onView(withId(R.id.myEditText)).perform(closeSoftKeyboard());

私が見つけたのは、私の場合、いくつかのデバイスでは、各時間

onView(withId(R.id.myEditText)).perform(TypeTextAction());

システムが新しいキーボードを別のキーボードの上に積み重ねたようなものだったので、私の問題を解決したのは[〜#〜] always [〜#〜] usecloseSoftKeyboard ()EVERY-TIMEこのようにTypeTextActionを使用しました。

onView(withId(R.id.myEditText)).perform(typeTextAction(), closeSoftKeyboard());

したがって、フォームを編集する必要がある場合は次のようになります。

onView(withId(R.id.myEditText1)).perform(typeTextAction(), closeSoftKeyboard());
onView(withId(R.id.myEditText2)).perform(typeTextAction(), closeSoftKeyboard());
onView(withId(R.id.myEditText3)).perform(typeTextAction(), closeSoftKeyboard());
onView(withId(R.id.myEditText4)).perform(typeTextAction(), closeSoftKeyboard());

テスト中にビューが表示されない場合は、perform(scrollTo())... use ...を使用してスクロールし、クリックアクションを実行します。

例:-

 onView(withId(R.id.btn)).perform(scrollTo()).perform(click());
4
Krishna

これと同じ問題がありますが、原因は次のとおりです。

Caused by: Android.support.test.espresso.AppNotIdleException: Looped for 3713 iterations over 60 SECONDS. The following Idle Conditions failed .

次のアクティビティに移動するボタンをクリックするので、どこに問題があるのか​​わかりませんが、まだボタンの調査を行っているようです

4
maudem

同じ問題があり、要素の位置を変更することで解決しました。

クリックしようとしていた位置に要素がありません。位置3をクリックしようとしたが、要素が2番目の位置にある(インデックスが0から始まることを完全に忘れていた)ので、要素の位置とその動作を完全に変更した

0
jyo cool

TestCaseで可能性の1つは、LiveDataを使用してデータベース操作を実行する場合、ルールの下での使用を避けることです。

@Rule public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();

これらのLine TestCaseを削除すると、完全に機能します。

0
Pinak Gauswami

これが発生する理由はほとんどありません。私の場合、ボタンをクリックした後、progress bar永遠に回転し続けたので、ネットワークコールまたは待機プロセスがある場合は、コールバックを受信した後にプログレスバーを停止してください。また、クリックを実行すると、何らかのアクションが発生するまで待機するため、クリックするだけでなく、クリックが実行されたときにアクションを実行していることを確認してください。

0
Vilen