私はonView(withId(R.id.check_box)).perform(click())
を持っていますが、チェックボックスが選択されていない場合にのみこれを行います。どのようにエスプレッソでこれを行うことができますか?Androidのエスプレッソ - チェックされていない場合はチェックボックスをクリック
答えて
また、以前の状態に応じて、チェックボックス/スイッチを切り替えたいと思っていました。
onView(withId(R.id.checkbox)).check(matches(isNotChecked())).perform(scrollTo(), click());
...と、これがONしたチェックボックスをOFFトグルする:
onView(withId(R.id.checkbox)).check(matches(isChecked())).perform(scrollTo(), click());
しかし、これは動作しませんを最初に、私はこれがOFFしたチェックボックスを切り替えてみましたエスプレッソはアクションを実行する前に特定のトグル状態を探しているためです。場合によっては、事前にオンかオフかを知らないこともあります。
私の解決策は、カスタムViewActionを使用して、以前の状態に依存しないチェック可能なオブジェクト(スイッチ、チェックボックスなど)をオフ/オンにすることです。それで、すでにONになっていれば、ONのままになります。 OFFの場合はONになります。ここViewActionです:
public static ViewAction setChecked(final boolean checked) {
return new ViewAction() {
@Override
public BaseMatcher<View> getConstraints() {
return new BaseMatcher<View>() {
@Override
public boolean matches(Object item) {
return isA(Checkable.class).matches(item);
}
@Override
public void describeMismatch(Object item, Description mismatchDescription) {}
@Override
public void describeTo(Description description) {}
};
}
@Override
public String getDescription() {
return null;
}
@Override
public void perform(UiController uiController, View view) {
Checkable checkableView = (Checkable) view;
checkableView.setChecked(checked);
}
};
}
そして、ここで(あなたがONに切り替えたいとき、この例では)あなたがそれを使用する方法は次のとおりです。推奨されていません
onView(withId(R.id.toggle)).perform(scrollTo(), setChecked(true));
あなたはあなたのコード内でこのようなものがあります:
@Rule
public ActivityTestRule<ActivityMain> ActivityMainRule = new ActivityTestRule<>(ActivityMain.class);
が
if (!ActivityMainRule.getActivity().findViewById(R.id.check_box).isChecked()) {
onView(withId(R.id.check_box)).perform(click())
}
をGoogleによると、それがどのようにエスプレッソ作品に反します非常に危険ですhttps://youtu.be/isihPOY2vS4?t=4m12s –
を試してみてくださいこれは、チェックボックスをチェックする必要があることを、あなたのテストの一部であるように思われます。これが失敗した場合、あなたのテストは、あなたのケースでは良いことかもしれない、失敗します
onView(withId(R.id.checkbox)).check(matches(not(isChecked())));
:
あなたがすることによってこれを確認することができます。次に、このケースが一致した後に、あなたが望むクリックを実行することができます。
これがあなたが望む状況でない場合、このエスプレッソテストで何をしようとしているかもっと説明できますか?
私は自分のテストを行う前にチェックボックスがチェックされていることを確認します。それがチェックされない理由は、別のテストでチェックが外されたためです。 – kyrax
エスプレッソはビューの状態を設定したり、ビューを操作することはできません。あなたのテストを構造化する他の方法がない場合、以前の答えはうまくいくでしょうが、エスプレッソの慣習に反します。テストを構造化してモジュール化して、ビューを操作する必要がないようにすることをお勧めします。@kyrax –
@kyraxエスプレッソテストでのアクティビティを使用することは非常に悪いことがわかっているので、私の答えは受け入れられますか? –
私は同じ問題を抱えていたANいつもSwitchCompat
class UncheckViewAction implements ViewAction{
@Override
public Matcher<View> getConstraints() {
return new Matcher<View>() {
@Override
public boolean matches(Object item) {
return isA(SwitchCompat.class).matches(item);
}
@Override
public void describeMismatch(Object item, Description mismatchDescription) {
}
@Override
public void _dont_implement_Matcher___instead_extend_BaseMatcher_() {
}
@Override
public void describeTo(Description description) {
}
};
}
@Override
public String getDescription() {
return null;
}
@Override
public void perform(UiController uiController, View view) {
SwitchCompat scView = (SwitchCompat) view;
scView.setChecked(false);
}
}
のチェックを外し自身ViewActionを書き、このようにそれを使用:今私が見つけスイッチが常にあることを確認することができます
onView(withId(R.id.check_box)).perform(new UncheckViewAction())
以前にチェックされているかどうかに関係なく、チェックされていません。
- 1. PHP JQueryチェックボックス - チェックボックスが事前チェックされている場合、チェックされていない場合、チェックされた属性を削除しません。
- 2. チェックボックスがチェックされている場合はラベルの色を変更し、チェックボックスがチェックされていない場合は赤色に変更します。
- 3. チェックボックスがチェックされていない場合はフィールドを無効にする
- 4. チェックボックスがチェックされている場合は、ライブアップデート値
- 5. チェックボックスがチェックされている場合はjQuery
- 6. チェックボックスがチェックされている場合、値を変更する
- 7. tkinterチェックボックスの設定値がチェックされている場合
- 8. AndroidのエスプレッソNoMatchingViewExceptionがチェックされている
- 9. チェックボックスがチェックされていない場合、ボタンを無効にする
- 10. 他のチェックボックスがチェックされている場合、チェックボックスをオンにするJavascript
- 11. UncheckAll /他のチェックボックスが重複してチェックされている場合はチェックボックスをチェック
- 12. チェックボックス2がチェックされている場合、チェックボックス1をオフにします。
- 13. Jquery Trackingチェックボックスがチェックされていないか、チェックされていないかチェックされていない
- 14. 偽りの値は機能しませんか?チェック/チェックされていないチェックボックスの場合
- 15. ASP.NETチェックボックスがチェックされていない
- 16. チェックした値がチェックされていない場合
- 17. jQuery検証フォーム入力の送信がクリックされ、チェックボックスがチェックされている場合
- 18. Railsフォーム - チェックボックスがチェックされていない場合、POSTにparamは含まれていません
- 19. チェックボックスがチェックされている場合は、「何か」を実行し
- 20. Laravel Validation =チェックボックスがチェックされている場合は2以上の整数値
- 21. トーストが表示されている場合のエスプレッソ
- 22. チェックボックスにチェックが入っている場合は、これ以外の操作をしないでください
- 23. JQueryがチェックされている場合にのみチェックボックスの値を取得
- 24. フォームのラジオボタンがチェックされていない場合はチェックします。
- 25. データテーブルのチェックボックスをチェックする/チェックしない場合のチェック方法
- 26. チェックボックスがチェックされている場合、フォームタイプの検証をオフにします。
- 27. 特定のチェックボックスをチェックする方法はチェックされているかどうかチェックされていない
- 28. エスプレッソのチェックボックスをクリックできません
- 29. jQuery - ラジオボタンがチェックされていない場合のエラー
- 30. ラジオボタンがチェックされていない場合の定義方法
これは受け入れる必要があります答え! – jakubbialkowski
パーフェクト、ありがとうございます@FrostRocket scrollToが自分のチェックボックスでサポートされていないことを伝えるエラーが発生したため、「scrollTo()」のViewActionを削除するだけでした。表示されているように、私はチェックボックスに "globalSearch"の値を設定したいと思った。 – yvolk
私は、チェックボックスの現在の状態のチェックを追加し、それを変更して答えを更新しました。(グローバル設定) (checkableView.isChecked()!=チェックされている){ { checkableView.setChecked(checked);} } ' – yvolk