我正在使用Espresso来测试Android应用程序。我无法找到访问和选择当前Activity的RadioButton(属于RadioGroup)的方法。有没有人有什么建议? 谢谢你
-Andrew
答案 0 :(得分:3)
给出以下布局:
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioGroup"
>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/first_radio_button"
android:id="@+id/firstRadioButton"
/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/second_radio_button"
android:id="@+id/secondRadioButton"
/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/third_radio_button"
android:id="@+id/thirdRadioButton"
/>
</RadioGroup>
使用以下内容编写新的测试方法:
onView(withId(R.id.firstRadioButton))
.perform(click());
onView(withId(R.id.firstRadioButton))
.check(matches(isChecked()));
onView(withId(R.id.secondRadioButton))
.check(matches(not(isChecked())));
onView(withId(R.id.thirdRadioButton))
.check(matches(not(isChecked())));
瞧!
答案 1 :(得分:1)
对于上述解决方案,如果“not”无法解析,请使用“isNotChecked”代替“(not(isChecked()))”
onView(withId(R.id.firstRadioButton))
.perform(click());
onView(withId(R.id.firstRadioButton))
.check(matches(isNotChecked()));
onView(withId(R.id.secondRadioButton))
.check(matches(isNotChecked())));
onView(withId(R.id.thirdRadioButton))
.check(matches(isNotChecked()));
答案 2 :(得分:0)
我也遇到了类似的问题,即我的RadioButton是在运行时生成的,因此无法直接通过ID访问它们。
但是,提出的解决方案还可以通过使用 withText
方法按其标签访问RadioButton的方式工作:
onView(withText(R.string.firstButtonLabelStringRes))
.perform(click());
onView(withText(R.string.firstButtonLabelStringRes))
.check(matches(isChecked()));
onView(withText(R.string.secondButtonLabelStringRes))
.check(matches(isNotChecked())));
onView(withText(R.string.thirdButtonLabelStringRes))
.check(matches(isNotChecked())));
编辑:我遇到的文字不是唯一的,所以我的解决方案是使用 allOf
匹配器:
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withParent;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.CoreMatchers.allOf;
...
onView(allOf(withText(R.string.buttonLabelStringRes),
withParent(withId(R.id.radioGroupId))))
.check(matches(isChecked()));