9

これがだまされた質問だとは思いません。私は簡単なエスプレッソ テストを書いています。その一部には、スナックバーの [OK] ボタンをクリックすることが含まれます。

Espresso.onView(allOf(withId(android.support.design.R.id.snackbar_text), withText(R.string.permission_snackbar)))
            .check(matches(isDisplayed()));
Espresso.onView(withText("Ok")).perform(click());

これはスローします

android.support.test.espresso.PerformException: ビューで「シングル クリック」を実行中にエラーが発生しました。「テキスト: is "Ok"」です。原因: java.lang.RuntimeException: ターゲット ビューが次の制約の 1 つ以上に一致しないため、アクションは実行されません: ビューの領域の少なくとも 90% がユーザーに表示されます。対象のビュー: "AppCompatButton{id=2131558552, res-name=snackbar_action, visibility=VISIBLE, width=264, height=144, has-focus=false, has-focusable=true, has-window-focus=true, is- clickable=true、is-enabled=true、is-focused=false、is-focusable=true、is-layout-requested=false、is-selected=false、root-is-layout-requested=false、has-input- connection=false, x=684.0, y=53.0, text=Ok, input-type=0, ime-target=false, has-links=false}"

何か案は?

4

2 に答える 2

8

ここRuntimeExceptionで見られる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.Viewこの問題は、実際にはが完全に表示されないことが原因です。

この問題は、競合状態が原因で発生します。ビューを開こうとしていて、開いている間にクリックしようとしています。Viewタイミングが適切でない場合、Espresso フレームワークで使用できるのは の 90% 未満になりますclick()Espresso Setup Instructionsで推奨されているように、アニメーションを無効にすることで問題を解決できる場合があります。

  • あなたの携帯電話に移動しますDeveloper Options
  • 以下を設定します
    • ウィンドウ アニメーション スケール = 0.0x
    • トランジション アニメーション スケール = 0.0x
    • アニメーター継続時間スケール = 0.0x

Transition Animation Scale私自身のテストでは、 を に設定するだけで問題を解決できることが示されています0.0x。ご想像のとおり、これは、発生している競合状態に対する完全に一貫したソリューションです。

于 2016-02-24T17:00:33.650 に答える
3

id を使用して簡単に見つけることができますsnackbar_action

onView(allOf(withId(android.support.design.R.id.snackbar_action)))
    .perform(click());
于 2015-11-01T22:10:53.127 に答える