android - Espresso 在布局中获取动态创建的子项

标签 android unit-testing android-espresso

Button.java

public class Button extends FrameLayout {
    public Button(Context context, AttributeSet attrs) {
        super(context, attrs);
        TextView textView = new TextView(context);
        textView.setText("Test");
    }
}

layout.xml

<LinearLayout>
    <com.Button id="button_1" />
    <com.Button id="button_2" />
</LinearLayout>

使用 Espresso,如何访问 Button 中创建的 TextView,并验证其文本?

onView(withId(R.id.button_1)<get_child>).check(matches(withText("Test")));

最佳答案

onView(withId(R.id.button_1)).check(matches(withChildText("Test")));

static Matcher<View> withChildText(final String string) {
    return new BoundedMatcher<View, FrameLayout>(FrameLayout.class) {
        @Override
        public boolean matchesSafely(FrameLayout view) {
            View child = view.getChildAt(0);
            if (child != null && child instanceof TextView) {
                return ((TextView) child).getText().toString().equals(string);
            }
            return false;
        }

        @Override
        public void describeTo(Description description) {
            description.appendText("with child text: ");
        }
    };
}

关于android - Espresso 在布局中获取动态创建的子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31755251/

相关文章:

android - getCid() 返回的 UTRAN 小区标识

android - webdriver python 的触摸事件示例?

c# - 如何先开发秒表类测试?

Android Espresso - 网络浏览器

android - 多次运行 Espresso 测试

android - libstreaming - 如何旋转流媒体视频?

android - 如何保存数据直到在android中卸载应用程序?

ruby-on-rails - 当实际情况与预期相同时,为什么这个简单的 Rails 单元测试会失败?

javascript - 否则在 $urlRouterProvider 上重定向到不应该在单元测试中的状态

多模块应用的 Android 测试覆盖率报告