gpt4 book ai didi

Android Espresso 测试卡在 perform(click());

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:18 25 4
gpt4 key购买 nike

我将 Espresso 用于一些自动化测试用例。场景是:

我有一个包含两个 fragment 的 Activity ,比如 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;
}
}

我哪里错了?

最佳答案

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

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

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

关于Android Espresso 测试卡在 perform(click());,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32970587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com