访问RadioButton并在Espresso中选择它

时间:2015-03-20 22:11:15

标签: android android-espresso

我正在使用Espresso来测试Android应用程序。我无法找到访问和选择当前Activity的RadioButton(属于RadioGroup)的方法。有没有人有什么建议? 谢谢你

-Andrew

3 个答案:

答案 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()));