2015-10-06 66 views
3

我正在使用Espresso进行一些自动化测试用例。情景是:Android Espresso Test卡住执行(click());

我有一个活动,其中包含两个片段说FrgA和FrgB。

FrgA包含一个列表,其中有一些项目会将用户点击FrgB。

一旦显示了FrgB,我检查FrgB上是否存在gridview。我用这个代码是:

@Test 
public void testProductsDisplayed(){ 
    onData(anything()).atPosition(1).perform(click()); 
    onView(withId(R.id.gridview)).check(matches(isDisplayed())); 
} 

我一直面临的问题,从FrgA列表项被成功点击,它也需要我到具有GridView中FRGB。但是我的测试不会进行到测试用例的第2行,并且在第一行(click())中被删除。一段时间后,它会超时。奇怪的是,如果我删除gridview并放置一些TextView并搜索它的存在,测试通过时没有任何错误。

我能想到的唯一的事情就是当它加载FrgB中的gridview内容时出现一些时序问题。对于FRGB的代码如下:

public class FrgB extends BaseFragment implements OnItemClickListener { 
private View mView; 
private List<Product> mProducts; 
private ImagesAdapter mAdapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    Log.d("Kart", "In onActivityCreated"); 

    GridView gvProducts = findTypedViewById(mView, R.id.gvProducts); 
    mAdapter = new ImagesAdapter(getActivity(), R.layout.image_grid_item, new ArrayList<Product>()); 

    if(getArguments() != null && getArguments().containsKey(Constants.CATEGORY_ID)){ 
     String catId = getArguments().getString(Constants.CATEGORY_ID); 
     Log.d("Kart", "In onActivityCreated - activity is: "+getActivity()); 
     if(getActivity() == null){ 
      Log.e("Kart", "Activity does not exist"); 
     }else{ 
      mProducts = ((ScrLanding)getActivity()).getProductsForCategory(catId); 
      mAdapter.addAll(mProducts); 
     } 

     gvProducts.setAdapter(mAdapter); 
     gvProducts.setOnItemClickListener(this); 

    } else{ 
     returnToLastScreen(); 
    } 
} 
/** 
* Method to remove current fragment from fragment manager 
*/ 
private void returnToLastScreen() { 
    UiHelper.showToast(getString(R.string.msg_no_products), Toast.LENGTH_SHORT); 
    removeFragment(this);  
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    mView = inflater.inflate(R.layout.frg_product_listing, container, false); 
    return mView; 
} 


@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 
    switch (parent.getId()) { 
    case R.id.gvProducts: 
     FrgProductDetails fragment = new FrgProductDetails(); 
     Bundle bundle = new Bundle(); 
     bundle.putSerializable(Constants.PRODUCT_INFO, mProducts.get(position)); 
     ((ScrLanding)getActivity()).setSelectedProductBitmap(mAdapter.getThumbsMap().get(position)); 
     fragment.setArguments(bundle); 
     addFragment(fragment, R.id.fragment_container); 
     break; 

    default: 
     break; 
    } 
} 

}

我要去哪里错了?

+0

嗨,是否解决?如果没有,请从失败的测试中添加日志 – piotrek1543

+0

嗨!你有任何解决方案?如果是,请分享:) – Slenkra

回答

0

我在使用ListView时遇到同样的问题。

有趣的是,我注意到如果我手动尝试滚动屏幕​​,测试会恢复。 添加此行解决了问题并重新开始测试。

onView(withId(R.id.myListView)).perform(swipeUp());