6

我在我的应用程序有三个活动的Android咖啡功能测试与片段

  1. 一个登录活动
  2. 主要活动
  3. 一个细节活动

我想用咖啡来测试一系列事件:单击登录活动中的登录按钮(打开主活动),然后单击主活动中的一个列表项,该活动将打开详细活动,然后单击详细活动中的另一个按钮。我开始通过创建这个简单的测试,才能到列表视图的引用:

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())); 
    } 
} 

mainActivityonCreate()方法我打开一个片段是这样的:

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 

我在做什么错?

+0

您是否找到了解决方案? – AdamMc331 2015-04-27 19:12:03

+0

如果您仍然在寻求帮助,请显示与此问题相关的'onCreate()'的完整代码。特别是显示'mListFragment'的声明和初始化。同时显示'ListFragment'的XML布局。 – 2017-02-17 02:45:15

回答

1

documentationonView的说明:

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

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

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

需要注意的是上面的,如果你的列表视图中包含至少一个项目将只通过这一点很重要。在物品存在的地方进行一次测试,并在物品不存在的地方进行一次测试是一个好主意。

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

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

+0

没有任何数据匹配将把列表放入层次结构中,错误就是这样。你的指导是有价值的,但只有**之后**手头的错误得到解决,你没有提供任何信息。 – TWiStErRob 2016-09-01 17:52:59

+0

提示:'onData(instanceOf(Cursor.class))'应该实现相同的数据查询。 'allOf'对于单个匹配器来说没有意义,而按定义来说'is'是多余的。但是,如果它使得代码读得更加英文,'is'可能是有意义的,因为'allOf',它不会。 – TWiStErRob 2016-09-01 17:56:26

0

在当前版本(Espresso 2.2.2)中,此例外总是附加一个View Hierarchy:子句,其中列出了所有可供匹配的视图。漫步,并检查你是否可以找到你的名单。

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