【问题标题】:Android Espresso functional tests with fragments带有片段的 Android Espresso 功能测试
【发布时间】:2015-02-11 13:08:37
【问题描述】:

我的应用中有三个活动

  1. 登录活动
  2. 主要活动
  3. 详细活动

我想用 espresso 来测试一系列事件:点击登录活动上的登录按钮,打开主活动,然后单击主活动中的一个列表项,打开详细活动,然后单击另一个按钮在详细活动中。我首先创建了这个简单的测试,以获取对列表视图的引用:

public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> {

    public LoginActivityTest() {
        super(LoginActivity.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();

        getActivity();
    }

    public void testSequence() throws Exception {
        // Login
        onView(withId(R.id.button_log_in)).perform(click());

        // Check if MainActivity is loaded
        onView(withId(R.id.container)).check(matches(isDisplayed()));

        // Check if Fragment is loaded
        onView(withId(R.id.list)).check(matches(isDisplayed()));
    }
}

ma​​inActivity onCreate() 方法上,我加载了这样的片段:

getFragmentManager().beginTransaction()
                .add(R.id.container, mListFragment)
                .commit();

ListFragment 片段有一个列表 (R.id.list),但测试仍然失败并显示 NoMatchingViewException

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: com.tests.android.development:id/list

我做错了什么?

【问题讨论】:

  • 你找到解决办法了吗?
  • 如果您仍在寻求帮助,请出示与此问题相关的onCreate() 的完整代码。特别是,显示mListFragment 的声明和初始化。同时显示ListFragment 的 XML 布局。

标签: java android android-fragments functional-testing android-espresso


【解决方案1】:

documentationonView 的备注:

注意:视图必须是视图层次结构的一部分。这可能不是 如果它作为 AdapterView 的一部分呈现(例如 ListView)。 如果是这种情况,请先使用 Espresso.onData 加载视图。

要使用onData 加载视图,您需要检查您的适配器在ListView 中的实例。换句话说,如果你的 listview 使用了 Cursor 适配器,你可以试试这个:

onData(allOf(is(instanceOf(Cursor.class)))).check(matches(isDisplayed()));

请务必注意,仅当您的列表视图包含至少一项时,上述内容才会通过。最好在有项目的情况下进行一次测试,在不存在项目的情况下进行一次测试。

有关如何检查确实存在的数据的更多信息,请参阅here

有关如何检查适配器中不存在的数据的更多信息,请参阅here

【讨论】:

  • 没有多少数据匹配会将List放入层次结构中,这就是错误所在。您的指导很有价值,但只有在手头的错误得到解决之后,您没有提供任何信息。
  • 提示:onData(instanceOf(Cursor.class)) 应该实现同样的数据查询。 allOf 对单个匹配器没有意义,is 根据定义是多余的。但是,is 可能有意义,如果它使代码阅读更多英文:这里它没有,因为allOf
【解决方案2】:

在当前版本(Espresso 2.2.2)中,此异常总是附加一个View Hierarchy: 子句,列出所有可匹配的视图。浏览一下,看看你是否能找到你的清单。

作为替代方案:查看android-sdk\tools\uiautomatorviewer.bat(或.sh),它从当前屏幕和层次结构中获取快照。在列表匹配行上放置一个断点,并与查看器检查列表是否存在。如果您找到该列表,则测试中可能存在时间问题。可能还没等到,请查看更多关于IdlingResources 的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    相关资源
    最近更新 更多