如何使用Espresso单击RecyclerView项目中的特定视图?我知道我可以点击位置0处的项目:
onView(withId(R.id.recyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
但是我需要点击该项目内的特定视图而不是项目本身.
提前致谢.
- 编辑 -
更确切地说:我有一个RecyclerView(R.id.recycler_view)项目是CardView(R.id.card_view).在每个CardView内部,我有四个按钮(除其他外),我想点击一个特定的按钮(R.id.bt_deliver).
我想使用Espresso 2.0的新功能,但我不确定是否可行.
如果不可能,我想使用这样的东西(使用托马斯凯勒代码):
onRecyclerItemView(R.id.card_view, ???, withId(R.id.bt_deliver)).perform(click());
Run Code Online (Sandbox Code Playgroud)
但我不知道该在问号上放些什么.
如何在Espresso测试中向下滚动到ScrollView的底部?谢谢!
我试图在我的表单中测试NestedScrollView中的EditTexts.我正在运行以下代码:
onView(withId(R.id.register_scroll_view)).perform(scrollTo()).perform(click());
Run Code Online (Sandbox Code Playgroud)
其中register_scroll_view是我的NestedScrollView.但是,我得到一个例外:
android.support.test.espresso.PerformException:在视图'上执行'滚动到'时出错,ID为:com.eazyigz.myapp:id/register_scroll_view'.引起:java.lang.RuntimeException:不会执行Action,因为目标视图不匹配以下一个或多个约束:(视图具有有效可见性= VISIBLE并且是a的后代:(可从类中分配:class android .widget.ScrollView或可从类中分配:class android.widget.HorizontalScrollView))
如何正确设计此测试,以便我可以测试需要滚动到可见的EditTexts?
我需要向下滚动浏览我的NestedScrollView以使用Espresso测试我的xml文件,但是我收到错误消息:"在视图上执行'滚动到'时出错",ID为:
其他几个帖子似乎也有类似的问题.
我遵循了以下说明:Android espresso NestedScrollView,如何滚动到底部
现在我得到前面提到的错误,并发现这篇文章:尝试滚动查看,但不显示视图
我的NestedScrollView中没有填充 - 我甚至尝试从XML中删除填充,用于测试目的,但它没有任何区别.
这是我的测试(到目前为止它不应该做任何事情,但向下滚动):
@Test
public void testScrollDownAbilityOfDetailsScrollView(){
goToSpecificItemOnStream(streamItemWithOneImage);
onView(withId(R.id.end_of_details))
.perform(ScrollToAction.betterScrollTo());
}
Run Code Online (Sandbox Code Playgroud)
它使用自定义的Scroll To Action类:
public final class ScrollToAction implements ViewAction {
private static final String TAG = ScrollToAction.class.getSimpleName();
@SuppressWarnings("unchecked")
@Override
public Matcher<View> getConstraints() {
return allOf(withEffectiveVisibility(Visibility.VISIBLE), isDescendantOfA(anyOf(
isAssignableFrom(ScrollView.class), isAssignableFrom(HorizontalScrollView.class), isAssignableFrom(NestedScrollView.class))));
}
@Override
public void perform(UiController uiController, View view) {
if (isDisplayingAtLeast(80).matches(view)) {
Log.i(TAG, "View is already displayed. Returning.");
return;
}
Rect rect = new Rect();
view.getDrawingRect(rect);
if (!view.requestRectangleOnScreen(rect, true /* immediate …Run Code Online (Sandbox Code Playgroud)