【问题标题】:Android UI unit-tests: how to find dynamically added checkbox?Android UI 单元测试:如何找到动态添加的复选框?
【发布时间】:2016-11-27 21:37:27
【问题描述】:

在我的 android 应用程序中,我有一个 ListView 的自定义项目(由可点击的标题 + 一个不带文本的复选框组成)。这些项目是动态添加的。

如何使用 Espresso 或类似框架在我的单元测试中选中其中一个复选框?

我找不到如何获取对其中一个复选框的引用。由于它们是动态添加的,我无法通过 id 找到它们,就像我通常使用静态 .xml 视图一样。

【问题讨论】:

    标签: android unit-testing checkbox android-espresso


    【解决方案1】:

    您需要以编程方式为复选框设置 id(参见 answerthis)。

        int checkBoxId = 200000; // global variable to count checkboxes
        for (int i = 0; i < 1000; ++i) {
            CheckBox box = new CheckBox(this);
            box.setId(++checkBoxId);
        }
    

    然后像往常一样找到它们:

    onView(withId(200003)).perform(click());
    

    【讨论】:

    • ids 不会与我的.xml 中的ids 冲突吗?例如EditText ?
    • 理论上可以。我查看了我的应用程序的 R.java - 所有 id 都以 0x7f (0x7f010176) 开头。因此,如果您的 id 小于 0x7f000000,则它们不应发生冲突
    【解决方案2】:

    这是我们在不更改应用代码的情况下如何做到的:

    int indexOfItem = 1;
    onData(anything()).inAdapterView(withId(R.id.listView))
                .atPosition(indexOfItem)
                .onChildView(withId(R.id.checkBox))
                .perform(click());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      相关资源
      最近更新 更多